2014-12-22 64 views
2

對於我的應用程序的必要性,我必須將查詢的列名作爲第一行返回。 現在,我必須將此結果排在前面,以便將它與我的結果集進行聯合,但困難的部分是:它必須是動態的,所以如果我向該表中添加新列,SELECT將帶來所有名稱的旋轉。SQL Server動態數據透視列名稱

以下SELECT帶給我的列名:

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 

我想到的是:

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

有沒有什麼簡單的方法要做到這一點沒有硬編碼列名?

預先感謝您!

+0

http://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query#10404455您可以用'stuff'部分從這個 – Bharadwaj

+0

預期的結果應該有一個單獨的列每個'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我沒有得到你OP想要獲得可以在pivot中使用的列列表來動態生成列。在數據庫中運行上面的查詢並檢查 –

+0

好的,我對OP有不同的解釋。作爲一個方面說明,我沒有downvote你的回答。 –