2014-12-22 2 views
2

내 응용 프로그램의 필요성 때문에 쿼리의 열 이름을 첫 번째 행으로 반환해야합니다. 이제이 결과를 결과 세트와 결합하기 위해이 결과를 PIVOT해야하지만, 어려운 부분은 동적이어야합니다. 따라서이 테이블에 새 열을 추가하면 SELECT가 피벗 된 모든 이름을 가져옵니다.SQL Server 동적 피벗 열 이름

선택 다음은 나에게 열 이름 제공 : 어떤 쉬운 방법이 있나요

Id CodeName Country StartDate EndDate (... whatever other columns I might have) 

:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Codes' 
ORDER BY INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION 

그리고 내 결과 집합은 다음과 같습니다

COLUMN_NAME 
Id 
CodeName 
Country 
StartDate 
EndDate 

내가 기대하는 것은입니다 열 이름을 하드 코딩하지 않고도 그렇게 할 수 있습니까?

미리 감사드립니다.

+0

http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query#10404455 별도의 열이 있어야이 – Bharadwaj

+0

예상 결과에서'stuff' 부분을 사용할 수 있습니다 각 'COLUMN_NAME'의 이름 선호되는 명명 체계는 무엇입니까? –

답변

0
DECLARE @cols NVARCHAR (MAX) 

SELECT @cols = COALESCE (@cols + ',[' + COLUMN_NAME + ']', 
       '[' + COLUMN_NAME + ']') 
       FROM (SELECT DISTINCT COLUMN_NAME,INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION O 
       FROM INFORMATION_SCHEMA.COLUMNS 
       WHERE TABLE_NAME = 'CODES') PV 
       ORDER BY O 


DECLARE @query NVARCHAR(MAX) 
SET @query = '   
       SELECT TOP 0 * FROM 
      (
       SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS 
       WHERE TABLE_NAME = ''CODES'' 
      ) x 
      PIVOT 
      (
       MIN(COLUMN_NAME) 
       FOR [COLUMN_NAME] IN (' + @cols + ') 
      ) p  

      '  
EXEC SP_EXECUTESQL @query 
+0

이게 뭐가 잘못 되었니? downvote의 필요성이 있습니까? –

+0

어머니의 약속입니다. 나는 당신의 대답에 투표하지 않았습니다. @NoDisplayName –

+0

데이터베이스의 모든 테이블에서 내 결과를 확인할 수 있습니다. 효과가있을 것입니다. @NoDisplayName –

0

간단한 방법은 declaring a variable이고, 열은 comma separted으로 지정합니다. 이 시도.

DECLARE @col_list VARCHAR(max)='' 

SELECT @col_list += '['+ COLUMN_NAME + '],' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'Codes' 
ORDER BY INFORMATION_SCHEMA.COLUMNS.ORDINAL_POSITION 

SELECT @col_list = LEFT(@col_list, Len(@col_list) - 1) 

SELECT @col_list 
+0

OP가 각 열 이름이 * 별도의 열 *에 포함 된 결과 집합을 원한다고 생각합니다. –

+0

@GiorgosBetsos i OP를 얻지 못했습니다. OP는 열을 동적으로 생성하기 위해 피벗에서 사용할 수있는 열 목록을 가져 오려고합니다. DB에서 위의 쿼리를 실행하고 –

+0

을 확인하십시오. OK OP의 다른 해석이 있습니다. 부차적 인 말로, 나는 너의 응답자를 다운 보그하지 않았다. –