2012-01-04 16 views
1

1か月間に異なる支店で注文された総在庫数量を累積するレポートを生成し、各支店で合併(GROUP BY)在庫数を合計します。php mysql sum issue

私は以下のように理解を容易にするための私のデータベーステーブルをトリミング:

Item  Branch-A  Branch-B  Branch-C  Branch-D 
---------------------------------------------------------- 
Pencil  20   15   32   8 
Ruler  12   0   40   10 
Staple  4    8    5   0 

のように...

:以下、例えば

Item  Branch  Order_Quantity 
--------------------------------------- 
Pencil Branch-A   5 
Ruler Branch-D   3 
Staple Branch-C   12 
Pencil Branch-A   5 
Ruler Branch-B   3 
Staple Branch-C   2 
Pencil Branch-A   10 
Ruler Branch-A   6 
Staple Branch-D   1 

が期待される成果結果の案であります

クエリを使用して上記の結果を呼び出し、各合計をそれぞれの支店列に割り当てるにはどうすればよいですか?

は、以下の私のクエリです:

SELECT `Item`, `Branch`, sum(`Order_Quantity`) FROM `table` GROUP BY `Item` 

が、私はテーブルを呼び出し、ループする場合、結果は

Item  Branch-A  Branch-B  Branch-C  Branch-D 
---------------------------------------------------------- 
Pencil  75   75   75   75 
Ruler  62   62   62   62 
Staple  17   17   17   17 

ホープ誰かがこのために助けることができるすべての枝に合計数量を表示します。

ありがとうございました。

+0

?あなたのPHPに貼り付ける必要があります。なぜなら、sqlに表示されているものとは別の列の枝を生成するものがないからです。 –

答えて

1

これはPIVOTのいくつかの種類である:まさにあなたが "ループ" INGが何であるか

select item, 
    sum(case when branch = 'Branch-A' then order_Quantity else 0 end) as BranchA, 
    sum(case when branch = 'Branch-B' then order_Quantity else 0 end) as BranchB, 
    sum(case when branch = 'Branch-C' then order_Quantity else 0 end) as BranchC, 
    sum(case when branch = 'Branch-D' then order_Quantity else 0 end) as BranchD 
from yourTable 
group by item 
+0

ありがとう! – conmen

0
SELECT SUM(Order_Quantity) AS CNT FROM `table` GROUP BY `Branch`; 
3

試してみてください。

SELECT `Item`, `Branch`, sum(`Order_Quantity`) FROM `table` GROUP BY `Item`, `Branch` 
1

あなたはそれぞれの「列」のためのサブ選択でクエリを作成することができます枝の有限数を持っていると仮定すると、あなたの合計と(分岐あたりのように)表示したいです、そう...

select 
    (select sum(order_quantity) from table where branch = 'Branch-A'), 
    (select sum(order_quantity) from table where branch = 'Branch-B'), 

などのように...

これは非常にエレガントなソリューションではありませんが、それはどのようになります あなたが探しています。

他のポスターのアドバイスに従えば、SQLの観点からはより効率的ですが、(あなたの質問に従って)見たいと思っている列は生成されません。

+0

stringが完全一致の場合にLIKEを使用するのはなぜですか? –

+0

習慣の力。常に=やlikeの文字列を比較してください。私のために見るだけで簡単です。効率的な損失があるかどうかはわかりませんが、もしあれば、私はそれを聞いたことがありません。 –

+0

@DrDredel正規表現を使用しているので、好きなときにLIKEと比較するのは習慣ではありません –