在SQL Server中标记每个ID



每个订单可能包括热饮或冷饮,或者两者都有。如下表所示。

tbody> <<tr>
orderID ProductID type
am2212冷饮
am251004热饮
am210032热饮

正如已经建议的那样,您可以通过使用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

结果是

tbody> <<tr>
orderIDProductID(无列名)
am2212两个
am251004两个
am210032两个
am351004热饮
am310032热饮

我认为你可以用一点条件聚合来做到这一点,假设类型描述如下:

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;

测试小提琴

相关内容

  • 没有找到相关文章

最新更新