sql >> データベース >  >> RDS >> Sqlserver

SQL Server :行を列に転置

    tagID の場合の 1 つの方法 値が事前にわかっている場合は、条件付き集計を使用します

    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
     

    または NULL で問題ない場合 '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
     

    または 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
     

    出力 (NULL を使用) s):

    TimeSeconds A1 A2 A3 A4---------- ------- ------ ----- ----- 1378700244 3.75 NULL NULL NULL1378700245 30.00 NULL NULL Null1378700304 1.20 Null Null1378700305 Null 56.00 Null Null1378700344 Null 11.00 Null Null1378700345 Null 0.53 Null1378700364 4.00 Null Null1378700365 14.503744.5034 

    TagID を把握する必要がある場合 値を動的に出力し、動的 ​​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. 1日の各時間の最新のレコードを選択する方法

    2. パッケージ/プロシージャの外部でOracle連想配列型を作成することは可能ですか?

    3. SQLで連続する重複値をカウントする

    4. サーバーに接続できません:Linux用のWindowsサブシステムのubuntuのpostgresql