每个订单可能包括热饮或冷饮,或者两者都有。如下表所示。
orderID | ProductID | type | am2 | 212 | 冷饮 |
---|---|---|
am2 | 51004 | 热饮 |
am2 | 10032 | 热饮 |
正如已经建议的那样,您可以通过使用case表达式来执行组,并且可以在外部应用程序中执行此操作,如以下DBFiddle示例
select o.orderID,
o.ProductID,
case when oo.coldcount > 0 and oo.hotcount > 0 then 'both' else o.type end
from orders o
outer apply ( select o2.orderID,
sum (case when o2.type = 'cold drink' then 1 else 0 end) coldcount,
sum (case when o2.type = 'hot drink' then 1 else 0 end) hotcount
from orders o2
where o2.orderID = o.orderID
group by o2.orderID
) oo
结果是
orderID | ProductID | (无列名) | am2 | 212 | 两个 |
---|---|---|---|
am2 | 51004 | 两个 | |
am2 | 10032 | 两个 | |
am3 | 51004 | 热饮 | |
am3 | 10032 | 热饮 |
我认为你可以用一点条件聚合来做到这一点,假设类型描述如下:
select orderID, case when Min(both) != Max(both) then 'both' else Min(type) end [Label]
from t
cross apply (values(case when type in('hot drink', 'cold drink') then type end))b(both)
group by orderID
order by orderID;
测试小提琴