2014-03-31 52 views
0

我使用轉動命令,我已經得到了它產生所需的輸出爲下面寫:拉電池數據

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

SELECT  Id, IssuedCN, [EmailAddress], [ServerHostName], [ManagerEmail] 

FROM  (SELECT Id, IssuedCN, StringValue, Name 
     FROM dbo.certmetadata) AS Source 

PIVOT(
MAX(StringValue) 
FOR Name IN ([EmailAddress], [ServerHostName], [ManagerEmail]) 
) 

AS PvtTable_1; 

但被轉動的表名會爲用戶定義。目前的[EmailAddress] [ServerHostName] [ManagerEmail],可能會停留在那裏,但可以更改,甚至不存在。用戶定義的名稱存儲在表中,但我似乎無法弄清楚如何可能將它們帶入上面的代碼。

我使用的服務器2012

如果這沒有任何意義,讓我知道,我可以嘗試提供更多的細節。

謝謝!

+0

也可能存在0-12個不同的用戶定義列。 – tylerkenepp

回答

0

如果你打算有未知數量的列,那麼你需要看看使用動態SQL。基本語法與此類似:

DECLARE @cols AS NVARCHAR(MAX), 
    @query AS NVARCHAR(MAX) 

-- get the list of columns 
-- apply a filter on the columns here if needed  
select @cols = STUFF((SELECT ',' + QUOTENAME(Name) 
        from dbo.certmetadata 
        group by name 
        order by name 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,'') 

set @query = 'SELECT Id, IssuedCN,' + @cols + ' 
      from 
      (
       SELECT Id, IssuedCN, StringValue, Name 
       from dbo.certmetadata 
      ) x 
      pivot 
      (
       min(stringvalue) 
       for name in (' + @cols + ') 
      ) p ' 

exec sp_executesql @query; 
+0

完美運作!非常感謝! – tylerkenepp