我想生成一个报告来累积不同分支机构在一个月内订购的总库存数量,每个分支机构将按合并的(GROUP by)库存汇总数量。
为了便于理解,我整理了数据库表如下:
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
例如,下面是预期结果的草案:
Item Branch-A Branch-B Branch-C Branch-D
----------------------------------------------------------
Pencil 20 15 32 8
Ruler 12 0 40 10
Staple 4 8 5 0
等等…
如何使用query调用上述结果,并将每个和分配给各自的分支列?
以下是我的查询:
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
希望有人能帮上忙。
谢谢。
尝试:
SELECT `Item`, `Branch`, sum(`Order_Quantity`) FROM `table` GROUP BY `Item`, `Branch`
这是某种PIVOT:
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
假设你有有限数量的分支,你可以创建一个查询,为你想要显示的每个"列"(按照每个分支)和你的总和进行子选择,就像这样…
select
(select sum(order_quantity) from table where branch = 'Branch-A'),
(select sum(order_quantity) from table where branch = 'Branch-B'),
等等。。
这不是一个非常优雅的解决方案,但它会带来你想要的结果。
否则,您可以遵循其他海报的建议,从sql的角度来看,这更有效,但不会生成您希望看到的列(根据您的问题)。
SELECT SUM(Order_Quantity) AS CNT FROM `table` GROUP BY `Branch`;