2016-10-20 2 views
1

유효한 SQL 하위 쿼리를 전달한 Sql Satement를 작성하고 결과 집합 WITH WITH HEADERS를 작성해야합니다.SQL 쿼리의 일부로 필드 이름 반환

어떻게 든 결과 집합을 조사하고, 필드 이름을 가져 와서 원본 데이터가있는 "조합"의 일부로 반환 한 다음 결과를 내보내기 위해 전달해야합니다.

아래 시도 : 하위 쿼리를 "A"로 지정하여 데이터 집합을 반환하고 해당 필드 이름을 쿼리해야합니다. ? 대개는 어쩌면?

select A.fields[0].name, A.fields[1].name, A.fields[2].name from 
(

Select 'xxx1' as [Complaint Mechanism] , 'xxx2' as [Actual Achievements] 
union ALL 
Select 'xxx3' as [Complaint Mechanism] , 'xxx4' as [Actual Achievements] 
union ALL 
Select 'xxx5' as [Complaint Mechanism] , 'xxx6' as [Actual Achievements] ) as A 

모든 포인터

이 결과 집합은 아래 표와 같이한다 (... 어쩌면 난 그냥 명백한 놓친 거지) 평가 될 것입니다 :

F1      F2 
--------------------- --------------------- 
[Complaint Mechanism] [Actual Achievements] 
xxx1     xxx2 
xxx3     xxx4 
xxx5     xxx6 
+0

당신은 당신이 원하는 방법의 예를 게시 할 수

여기에 한 가지주의 할 점은 당신의 열 이름 아래에있는 모든 데이터를 문자열로 변환해야 할 것입니다 볼 출력? – CGritton

+0

실행중인 SQL Server의 버전은 무엇입니까? –

+0

SQL 2012/2014 – Stefan

답변

1

당신은 정적 번호가있는 경우 데이터를 임시 테이블에 넣은 다음 tempdb.sys.columns을 쿼리하여 열 이름을 가져올 수 있습니다. 그러면 데이터 상단에 union을 입력 할 수 있습니다. 역동적 인 수의 열이 있다면 동적 SQL을 사용하여 pivot 문을 작성해야하지만 알아두면됩니다.

select 1 a, 2 b 
into #a; 

select [1] as FirstColumn 
     ,[2] as SecondColumn 
from (
    select column_id 
      ,name 
    from tempdb.sys.columns 
    where object_id = object_id('tempdb..#a') 
    ) d 
pivot (max(name) 
     for column_id in([1],[2]) 
     ) pvt 

union all 

select cast(a as nvarchar(100)) 
    ,cast(b as nvarchar(100)) 
from #a; 

쿼리 결과 :

| FirstColumn | SecondColumn | 
|-------------|--------------| 
|  a  |  b  | 
|  1  |  2  | 
관련 문제