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

SQL Server 2005 で行を列に転置する

    PIVOT . PIVOT でこれを行うには 2 つの方法があります。変換する列をコーディングする静的ピボットと、実行時に列を決定する動的ピボットのいずれかです。

    静的ピボット:

    SELECT *
    FROM
    (
        SELECT col1, col2
        FROM yourTable
    ) x
    PIVOT
    (
       min(col2)
       for col1 in ([A], [B], [C])
    )p
    

    SQL Fiddle with Demo を参照してください。

    動的ピボット:

    DECLARE @cols AS NVARCHAR(MAX),
        @query  AS NVARCHAR(MAX)
    
    select @cols = STUFF((SELECT distinct ',' + QUOTENAME(col1) 
                        from t1
                FOR XML PATH(''), TYPE
                ).value('.', 'NVARCHAR(MAX)') 
            ,1,1,'')
    
    set @query = 'SELECT ' + @cols + ' from 
                 (
                    select col1, col2
                    from t1
                ) x
                pivot 
                (
                    min(col2)
                    for col1 in (' + @cols + ')
                ) p '
    
    execute(@query)
    

    SQL Fiddle with Demo を参照してください

    PIVOT を使用したくない場合 関数の場合、CASE を使用して同様のタイプのクエリを実行できます ステートメント:

    select 
      SUM(CASE WHEN col1 = 'A' THEN col2 END) as A,
      SUM(CASE WHEN col1 = 'B' THEN col2 END) as B,
      SUM(CASE WHEN col1 = 'C' THEN col2 END) as C
    FROM t1
    

    デモによる SQL Fiddle を参照してください。



    1. PL/pgSQLでのレコードのタプル構造の宣言

    2. where句での関数呼び出し

    3. ストアド プロシージャとは異なる結果を返す SSRS

    4. bcp:エラー =[Microsoft][SQL Server Native Client 10.0]文字列データ、右側の切り捨て