我一直在使用Stack Overflow的例子來嘗試和理解PIVOT函數,例如; Convert Rows to columns using 'Pivot' in mssqlT-SQL使用PIVOT
到目前爲止,我想出了下面的示例;
CREATE table #rawTable (id int, header varchar(20), visitId int, performedWhen DateTime, recordedValue varchar(20))
INSERT INTO #rawTable (id, header, visitId, performedWhen, recordedValue) VALUES (10,'Blood Pressure', 1,'1 Jan 2014 10:10','110/85')
INSERT INTO #rawTable (id, header, visitId, performedWhen, recordedValue) VALUES (11,'Heart Rate', 1,'1 Jan 2014 10:10','75')
INSERT INTO #rawTable (id, header, visitId, performedWhen, recordedValue) VALUES (12,'Temperature', 1,'1 Jan 2014 10:10','36.9')
INSERT INTO #rawTable (id, header, visitId, performedWhen, recordedValue) VALUES (10,'Blood Pressure', 2,'1 Jan 2014 14:35','120/70')
INSERT INTO #rawTable (id, header, visitId, performedWhen, recordedValue) VALUES (10,'Blood Pressure', 3,'2 Jan 2014','110/80')
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((select ',' + QUOTENAME(convert(varchar(17), performedWhen, 113))
from #rawTable
group by performedWhen
order by performedWhen
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'select header, ' + @cols + ' from
(
select id, header, visitId, performedWhen, recordedValue
from #rawTable
) x
pivot
(
max(recordedValue)
for performedWhen in (' + @cols + ')
) p'
EXEC sp_executesql @query
DROP table #rawTable
這產生以下結果;我真正需要的是這個結果(即)ALl在一行上的「血壓」值;
Header 01 Jan 2014 10:10 01 Jan 2014 14:35 02 Jan 2014 00:00
---------------------------------------------------------------------------
Blood Pressure 110/85 120/70 110/80
Heart Rate 75 NULL NULL
Temperature 36.9 NULL NULL
我不是在尋找的答案,只是一個線索指向我朝着正確的方向,我就不能得到解決這個我的頭。 :)
SQL Server版本是2012 Enterprise。
當你申請了'PIVOT'功能,每次未在樞軸部分被用於將列你自己內心的選擇列表'分組by'。您可以通過在最終選擇列表中使用'select *'來找出問題。您有一個按其分組的列是唯一的,並且正在導致多行。 _hint:visitid_ – Taryn
謝謝你教我如何釣魚;)。分組讓我... – Damo
好吧,你說你想要一個線索,讓你在正確的方向。 – Taryn