sql - 基于事务的 SQL 分析
问题描述
我有以下 SQL 表:
1. ItemLevel 表
SiteID BusinessDate ItemName UnitsSold UnitsSale ItemNo OrderNo
----------------------------------------------------------------------------
1 16/05/2019 Beef 1 5 10001 122-1
1 16/05/2019 Chicken 9 18 10002 122-1
1 16/05/2019 Beef 2 5 10001 122-4
1 16/05/2019 Chicken 2 6 10002 122-4
1 16/05/2019 Beans 4 8 10004 122-4
2 16/05/2019 Beef 2 5 10001 122-2
2 16/05/2019 Chicken 1 6 10002 122-2
3 16/05/2019 Bread 3 5 10003 122-3
3 16/05/2019 Beans 7 17 10004 122-3
2.主项目表
ItemNo FullName MenuCategory
---------------------------------
10001 Beef Group1
10002 Chicken Group1
10003 Bread Group2
10004 Beans Group2
10005 Orange Group3
预期结果
ItemNo FullName MenuCategory SoldwithGroup1 SoldwithGroup2 SoldwithGroup3
-----------------------------------------------------------------------------------------------
10001 Beef Group1 5 2 0
10002 Chicken Group1 12 2 0
10003 Bread Group2 0 3 0
10004 Beans Group2 4 7 0
10005 Orange Group3 0 0 0
上面的结果,我们将主项目表中的所有菜单项按行列出,并且每个项目都根据不同的类别进行检查,以获得销售的总单位。
示例:我们正在检查每个订单有多少牛肉项目(售出的单位)与牛肉或鸡肉(Group1)一起,其他列(oldwithGroup2,SoldwithGroup3)也是如此
我们在 SoldwithGroup1 栏下售出了 5 个单位,因为我们检查了与牛肉本身(因为同一项目属于同一类别)或与订单号(122-1、122-4 和 122- 2)。
解决方案
您的问题很难理解,因为这些值不会在结果集中相加。
也就是说,对于每件商品,按组查看以同一订单出售的其他商品的数量确实有意义。我怀疑这就是你想要的。
这是一个相当复杂的自连接:
with ilg as (
select il.*, mi.group
from itemlevel il join
materitem mi
on il.itemno = mi.itemno
)
select mi.itemno, mi.fullname, mi.MenuCategory,
sum(case when ilg2.MenuCategory = 'Group1' then ilg2.unitssold end) as group1,
sum(case when ilg2.MenuCategory = 'Group2' then ilg2.unitssold end) as group2,
sum(case when ilg2.MenuCategory = 'Group3' then ilg2.unitssold end) as group3
from masteritems mi left join
ilg
on mi.itemno = ilg.itemno left join
ilg ilg2
on ilg.orderno = ilg2.orderno and ilg.itemno <> ilg2.itemno
group by mi.itemno, mi.fullname, mi.MenuCategory
推荐阅读
- python - 无法将字符串和列表从一个函数返回到另一个函数
- angular - 如何从 Observable 中检索值以用于服务 API 调用
- c# - 以编程方式禁用和启用 ToolStripMenuItem
- mysql - 如何按(多个值)中的位置对 GROUP_CONCAT 列进行排序?
- ios - 旋转后改变棋盘颜色
- c++ - 使用 GMock 的 EXPECT_DEATH - 没死
- java - 为什么 Spring Boot 由于 URL 未规范化而拒绝 GET 请求?
- angular - Angular 中的指令:它们为什么有用?它们不能被(事件)代替吗?
- laravel - 在线搬家项目破坏了laravel控制器
- julia - Plots.jl:如何玩点和线或两个不同的系列?