我有一个包含这样的订单数据的表:表Order_Detail和Item_Master通过Item#连接 我们想报告订单号, Order_Detail表:
Order# Item#
1234 IPhone6
1234 IPhone5
1234 Battery
join Item_Master:
Item# Item_type Desc
IPhone6 Phone Smartphone
IPhone5 Phone Smartphone
现在我们只需要订单号,只有一个Item-Type = Phone。我们只对手机类型感兴趣。我尝试使用Query / 400并对订单#sn = Phone进行计数,然后仅计数= 1.但是这确实带来了一些具有多个电话类型=电话的订单,在我们的例子中我们不会想要这个订单。
答案 0 :(得分:3)
你的问题有点令人困惑。您是否希望获得Item_Type = 'Phone'
的订单号?如果是这样,下面的内容对您有用:
SELECT COUNT(DISTINCT OrderNum) AS OrderNumCount
FROM Order_Detail o
INNER JOIN Item_Master i ON o.ItemNum = o.ItemNum
WHERE Item_type = 'Phone'
或者您是仅仅处理了项目表中只有一条记录链接的订单。如果是这样,那么你可能想要:
SELECT o.OrderNum
FROM Order_Detail o
INNER JOIN Item_Master i ON o.ItemNum = o.ItemNum
WHERE Item_type = 'Phone'
GROUP BY o.OrderNum
HAVING COUNT(*) = 1
答案 1 :(得分:2)
您可以尝试类似
的内容SELECT o.OrderNum
FROM
Order_Detail o
INNER JOIN
Item_Master m
On o.ItemNum = m.ItemNum
WHERE m.Item_Type = 'Phone'
GROUP BY o.OrderNum
HAVING COUNT(*) = 1
答案 2 :(得分:1)
此查询将返回ordernums,其中唯一订购的商品类型为“phone”
select ordernum
from order_detail od
join item_master im on im.itemnum = od.itemnum
group by ordernum
having count(case when im.item_type <> 'Phone' then 1 end) = 0
and count(*) = 1
如果您想允许多个“手机”订单,则可以删除and count(*) = 1