2016-11-04 4 views
1

私は次のようなSQLの結果セットを持っている:SQL結果セットをどのようにフラット/ピボットするのですか?

Sql Result Set

はどうすればこの結果は、各ItemCodeのために一列のみを表示するように得ることができますか?私が探しているグループ化を防ぐ列を含める必要があるので、GROUP BYを使用しても機能していないようです。

私が書いたクエリは、各倉庫の行があるテーブルからデータを引き出して、各ItemCodeに対して1つの行しか持たないようにフォーマットしようとしています。

SELECT 
    ItemCode, 
    ISNULL((SELECT Quantity WHERE WhsCode = 10), 0) 'Whs10QTY', 
    ISNULL((SELECT Quantity WHERE WhsCode = 20), 0) 'Whs20QTY', 
    ISNULL((SELECT SalesAmt WHERE WhsCode = 10), 0) 'Whs10SalesAmt', 
    ISNULL((SELECT SalesAmt WHERE WhsCode = 20), 0) 'Whs20SalesAmt', 
    ISNULL((SELECT GrssProfit WHERE WhsCode = 10), 0) 'Whs10GrssProfit', 
    ISNULL((SELECT GrssProfit WHERE WhsCode = 20), 0) 'Whs20GrssProfit' 
FROM 
    @Table t 

注:それを作るためとして、私はこの質問を書き換えおよび解釈retitling助けが必要になることがあり、私はここで

は私のクエリは、現在どのように見えるか..ですピボットは、私が何をしようとしている用語だと思いますコミュニティにとってより有用です。助けてくれてありがとう!

答えて

1

私はあなたのようなこれを簡素化することができると思います。

Select ItemCode 
     ,Whs10QTY  = sum(case when WhsCode = 10 then Quantity else 0 end) 
     ,Whs20QTY  = sum(case when WhsCode = 20 then Quantity else 0 end) 
     ,Whs10SalesAmt = sum(case when WhsCode = 10 then SalesAmt else 0 end) 
     ,Whs20SalesAmt = sum(case when WhsCode = 20 then SalesAmt else 0 end) 
     ,Whs10GrssProfit = sum(case when WhsCode = 10 then GrssProfit else 0 end) 
     ,Whs20GrssProfit = sum(case when WhsCode = 20 then GrssProfit else 0 end) 
From @Table t 
Group By ItemCode 
+0

はあなたの先生ありがとうございました!これはうまくいった。 – Dezryth

+0

@Dezryth喜んでお手伝いします。 –

関連する問題