sql >> Databáze >  >> RDS >> Sqlserver

SQL Server:Transponujte řádky do sloupců

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é 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. Alternativy MySQL Proxy pro sdílení databáze

  2. Nepodařilo se najít platný datový adresář. Obecná binární instalace MySQL

  3. Jak používat SYS_REFCURSUR ve výběru pro aktualizaci v pl/sql

  4. Jak zjistit, že uživatel je přítomen v databázi Sqlite pomocí Androidu?