我真的不知道表达这个问题的最佳方法,因此我很难找到解决方案。我有一个查询,可在给定的一天提取所有订单。我需要知道哪些订单上有库存='N'的物品。我不是要查找所有物品均为库存='N'的订单。如果其中至少有一个,我希望在单独的一栏中说“ Y”。
select
a.OrderNum,
c.Inventory,
case when c.inventory = 'n' then 'Y' else 'N' end as NonStock
from orders a inner join orditems b on a.ordnum = b.ordnum inner join items
c on b.code = c.code
where a.OrderDate = '7/24/2017'
group by a.OrderNum, c.Inventory
这是我想出的原始代码。我知道这是不正确的。我需要类似(或完全不同,我真的不知道)的东西,只要订单中的任何项目的c.inventory ='N',NonStock列的位置就会显示Y。我是否朝着正确的方向前进?任何指导将不胜感激。
样本数据:
a.OrderNum b.ItemNum c.Inventory
123 3 Y
123 4 N
123 5 Y
124 6 Y
124 9 N
124 8 Y
125 11 Y
125 13 Y
125 15 Y
所需输出:
a.OrderNum NonStock
123 Y
124 Y
125 N
由于订单123和124上具有c.inventory ='N'的物料,因此它们在所需输出上被触发为Nonstock。订单125具有3个全为c.inventory ='Y'的项目,因此对于NonStock,它将得到'N'。
最佳答案
看起来很正确,为此您需要使用CASE
表达式,但根本不需要使用group by
。我的意思是group by a.OrderNum, c.Inventory
行。您的查询应该只是
select OrderNum, max(NonStock) as NonStock
from (
select
a.OrderNum,
c.Inventory,
case when c.inventory = 'n' then 'Y' else 'N' end as NonStock
from orders a inner join orditems b on a.ordnum = b.ordnum inner join items
c on b.code = c.code
where a.OrderDate = '7/24/2017' ) xxx
group by OrderNum;
关于mysql - SQL查询将告诉您订单上的任何零件是否非库存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45303508/