我想生成一份报告,以累计一个月内不同分支机构订购的总库存数量,每个分支机构将按合并(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
依旧......
如何使用查询调用上述结果并将每个总和分配给各自的分支列?
下面是我的查询:
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 :(得分:3)
尝试:
SELECT `Item`, `Branch`, sum(`Order_Quantity`) FROM `table` GROUP BY `Item`, `Branch`
答案 1 :(得分:1)
假设您有一个有限数量的分支,您可以为您希望显示的每个“列”(按分支)创建一个带有子选择的查询,并使用您的总和,如此...
select
(select sum(order_quantity) from table where branch = 'Branch-A'),
(select sum(order_quantity) from table where branch = 'Branch-B'),
等。
这不是一个非常优雅的解决方案,但它会产生你想要的东西。
否则你可以按照其他海报的建议,从sql的角度来看效率更高,但不会生成你希望看到的列(根据你的问题)。
答案 2 :(得分:1)
这是某种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
答案 3 :(得分:0)
SELECT SUM(Order_Quantity) AS CNT FROM `table` GROUP BY `Branch`;