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

PIVOT の使用時に SQL Server 2012 で正しい SUM 値を取得できない

    次のクエリは、必要なものを提供するはずです:

    SELECT Store,
           TotalSold,
           [John] AS WastedByJohn,
           [Jim] AS WastedByJim,
           [Alex] AS WastedByAlex
    FROM (SELECT Store, Employee, Waste,
                 SUM(Sold) OVER (PARTITION BY Store) AS TotalSold
          FROM #Foo) src
    PIVOT
        (SUM(Waste)
         FOR Employee IN ([John], [Jim], [Alex])
        ) PVT
    

    予期しない結果が得られる理由を理解するには、GROUP BY を使用せずにクエリを試してください。 節:

    SELECT Store, Sold, [John], [Jim], [Alex]
    FROM 
        #Foo
    PIVOT
        (SUM(Waste)
         FOR Employee IN ([John], [Jim], [Alex])
        ) PVT
    

    出力:

    Store       Sold    John    Jim     Alex
    Harrisburg  20,00   20,00   10,00   NULL
    Seattle     20,00   NULL    10,00   10,00
    

    次に、サンプル データの 2 番目のバージョンで同じことをもう一度試してください:

    出力:

    Store       Sold    John    Jim     Alex
    Harrisburg  25,00   10,00   NULL    NULL
    Harrisburg  30,00   10,00   NULL    NULL
    Harrisburg  40,00   NULL    10,00   NULL
    Seattle     50,00   NULL    10,00   NULL
    Seattle     60,00   NULL    NULL    10,00
    

    2 つの異なる結果セットを比較すると、PIVOT であることが明確にわかります。 参加していない列のすべての組み合わせ、つまり Store のすべての組み合わせに対して行われます 、Sold .

    最初のケースでは Harrisburg,20,00 しかありません そして Seattle,20,00 .そのため、この場合は 2 行しか取得できません。 2 番目のケースでは、合計 3 + 2 =5 通りの組み合わせがあります。

    GROUP BY の理由がわかります。 2 番目のケースでのみ機能します。



    1. 外部キーが存在しない場合は、名前を使用せずに外部キー制約を追加しますか(または存在する場合は外部キー制約を削除しますか)?

    2. getArrayのSQLFeatureNotSupportedException

    3. SQLServer2008はsaアカウントを有効にします

    4. ORA-01002:フェッチが順不同です