sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server:Transponer rækker til kolonner

En måde at gøre det på, hvis tagID værdier er kendt på forhånd er at bruge betinget aggregering

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
 

eller hvis du er OK med NULL værdier i stedet for '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
 

eller med 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
 

Output (med 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 NULL NULL1378700344 NULL 11,00 NULL NULL1378700345 NUL 

Hvis du skal finde TagID værdier ud dynamisk, og brug derefter dynamisk SQL

DECLARE @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)
 


  1. Vil du ændre startnummer for automatisk stigning?

  2. En tabel, to kolonner MYSQL-forespørgselsudfordring

  3. Sådan returneres tabellen ved hjælp af mysql-funktionen

  4. Oracle grupper efter kun EN kolonne