Một cách để làm điều đó nếu tagID
các giá trị được biết trước là sử dụng kết hợp có điều kiện
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
hoặc nếu bạn đồng ý với NULL
các giá trị thay vì '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
hoặc với 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
Đầu ra (với NULL
s):
Thời gian Giây A1 A2 A3 A4 ------------- ---------------- ----- 1378700244 3,75 NULL NULL NULL1378700245 30,00 NULL NULL NULL1378700304 1,20 NULL NULL 1378700305 NULL 56,00 NULL NULL1378700344 NULL 11,00 NULL 1378700345 NULL 0,53 NULL1378700364 4,00 NULL NULL1378700365 14,50 NULL NULL1378700384 144,00 NULLNếu bạn phải tìm
TagID
giá trị ra ngoài động rồi sử dụng SQL độngDECLARE @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)