由於您使用的是SQL Server,因此您可以通過多種方式獲得結果。
可以使用聚合函數CASE表達式:
select id, version, date,
max(case when valuetype = 'X' then value end) X,
max(case when valuetype = 'Y' then value end) Y
from yourtable
group by id, version, date;
見SQL Fiddle with Demo。
從SQL Server 2005開始,引入了PIVOT功能。如果你有值的數量有限,那麼你可以硬編碼查詢:
select id, version, date, X, Y
from
(
select id, version, date, valuetype, value
from yourtable
) d
pivot
(
max(value)
for valuetype in (X, Y)
) p;
見SQL Fiddle with Demo。最後,如果你有一個未知的數值,那麼你就需要使用動態SQL來得到結果:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT ',' + QUOTENAME(ValueType)
from yourtable
group by ValueType
order by ValueType
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = N'SELECT id, version, date,' + @cols + N'
from
(
select id, version, date, valuetype, value
from yourtable
) x
pivot
(
max(value)
for valuetype in (' + @cols + N')
) p '
execute sp_executesql @query;
見SQL Fiddle with Demo您正在使用哪種關係數據庫
? – Shiva