Jeden způsob, jak to udělat, je-li tagID
hodnoty, které jsou předem známy, je použití podmíněné agregace
SELECT TimeSeconds,
COALESCE(MAX(CASE WHEN TagID = 'A1' THEN Value END), 'n/a') A1,
COALESCE(MAX(CASE WHEN TagID = 'A2' THEN Value END), 'n/a') A2,
COALESCE(MAX(CASE WHEN TagID = 'A3' THEN Value END), 'n/a') A3,
COALESCE(MAX(CASE WHEN TagID = 'A4' THEN Value END), 'n/a') A4
FROM table1
GROUP BY TimeSeconds
nebo pokud souhlasíte s NULL
hodnoty namísto 'n/a'
SELECT TimeSeconds,
MAX(CASE WHEN TagID = 'A1' THEN Value END) A1,
MAX(CASE WHEN TagID = 'A2' THEN Value END) A2,
MAX(CASE WHEN TagID = 'A3' THEN Value END) A3,
MAX(CASE WHEN TagID = 'A4' THEN Value END) A4
FROM table1
GROUP BY TimeSeconds
nebo pomocí PIVOT
SELECT TimeSeconds, A1, A2, A3, A4
FROM
(
SELECT TimeSeconds, TagID, Value
FROM table1
) s
PIVOT
(
MAX(Value) FOR TagID IN (A1, A2, A3, A4)
) p
Výstup (s NULL
s):
TimeSeconds A1 A2 A3 A4----------- ------- ------ ----- -----1378700244 3,75 NULL NULL NULL1378700245 30,00 NULL NULL NULL1378700304 1,20 NULL NULL NULL1378700305 NULL 56,00 NULL1378700344 NULL 11,00 NULL NULL1378700345 NULL13004444,50 NUll NULL144444444,50 NULL13361444,50 NULL130041444,50 NULL1336144,50 NULL1336144,50 NULL1337844,53 NULL133614,53 NULL133614,53.Pokud musíte zjistit
TagID
hodnoty dynamicky a poté použijte dynamické SQLDECLARE @cols NVARCHAR(MAX), @sql NVARCHAR(MAX) SET @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(TagID) FROM Table1 ORDER BY 1 FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'),1,1,'') SET @sql = 'SELECT TimeSeconds, ' + @cols + ' FROM ( SELECT TimeSeconds, TagID, Value FROM table1 ) s PIVOT ( MAX(Value) FOR TagID IN (' + @cols + ') ) p' EXECUTE(@sql)