如果你看一下通過的Mikael鏈接的答案,你會意識到你將需要動態生成的列數據透視聲明自PIVOT語法沒有按在FOR子句中不允許子查詢。所以基本上你需要做的是這樣的:
DECLARE
@cols AS NVARCHAR(MAX),
@y AS INT,
@sql AS NVARCHAR(MAX);
-- Construct the column list for the IN clause
-- e.g., [Urea],[Uric Acid],[Cholesterol]
SET @cols = STUFF(
(SELECT N',' + QUOTENAME(y) AS [text()]
FROM (SELECT DISTINCT (LabTestName) AS y FROM YourTable) AS Y
ORDER BY y
FOR XML PATH('')),
1, 1, N'');
現在,您可以建立自己的PIVOT語句這樣:
set @SQL = N'
SELECT SourceCollectedDate,'[email protected]+N'
FROM YourTable
PIVOT (
SUM(results) FOR LabTestName IN ('[email protected]+N')
) AS PivotTable
ORDER BY SourceCollectedDate desc
'
並執行它:
EXEC sp_executesql @sql
將產生:
SourceCollectedDate Urea Uric Acid Cholesterol
2013-06-04 00:00:00.000 5 10 NULL
2013-06-03 00:00:00.000 NULL NULL 25
請注意,我的例子有YourTable
作爲表名。你需要用你的實際表名替換它。
SQL Fiddle(基於斷什麼乍得創建)
你試過[pivot](http://msdn.microsoft.com/en-us/library/ms177410(v = sql.105).aspx) –
[你有什麼試過?](http:// mattgemmell.com/2008/12/08/what-have-you-tried/) – Kash