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

どのようにピボットを使用できますか?

    こちら の技術投稿を確認しました PIVOT は集計結果のみを返すため、PIVOT を使用したくないことがわかりました。 UNPIVOT を使用すると、探しているものに非常に近くなり、各列のテーブルで結合を行うだけです。以下に提供されたデータを使用して例を作成しました:

    ----Create the table and insert values as portrayed in the previous example.
    CREATE TABLE pvt (EmpId int, Day1 char(1), Day2 char(1), Day3 char(1));
    CREATE TABLE pvt2 (EmpId int, DayNum CHAR(4), DayNums CHAR(4));
    GO
    INSERT INTO pvt VALUES (1,'A','P','P');
    INSERT INTO pvt VALUES (2,'P','P','P');
    GO
    --Unpivot the table.
    INSERT INTO pvt2
    SELECT EmpId,DayNum, DayNums
    FROM 
       (SELECT EmpId, Day1, Day2, Day3
       FROM pvt) p
    UNPIVOT
       (DayNums FOR DayNum IN 
          (Day1,Day2,Day3)
    )AS unpvt;
    GO
    SELECT
     a.DayNum,
     a.DayNums,
        b.DayNums
    FROM pvt2 a
     JOIN pvt2 b ON a.DayNum = b.DayNum
      AND a.EmpId=1
      AND b.EmpId = 2
    

    上記のコードを実行すると、以下が返されます:

    Exp   1  2  3 as EmpId
    ----------
    Day1  A  P  ....
    Day2  P  P  ...
    Day3  P  P  ...
    

    私が知っている唯一の他の解決策は動的 SQL であり、これは遅く、危険があります。ただし、コードを 1 回実行するだけでも機能する可能性があります。




    1. 参照時にクライアントにSQLNCLI10プロバイダーがインストールされているかどうかを確認するにはどうすればよいですか?

    2. トリガーを起動したクエリの文字列を取得します

    3. デバッグすると、現在のストアドプロシージャのバージョンが表示されない

    4. ExecuteNonQueryは-1を返します