我真的不知道表达这个问题的最佳方法,因此我很难找到解决方案。我有一个查询,可在给定的一天提取所有订单。我需要知道哪些订单上有库存='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/

10-15 21:30