You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中按orderID实现饮品类型标签标记的SQL查询

订单饮品类型标记的SQL查询方案

每个订单可能包含热饮、冷饮或同时包含两者,现有订单数据表如下:

orderIDProductID类型
am2212冷饮
am251004热饮
am210032热饮

需求说明

若订单同时包含热饮和冷饮两种类型,则标记为“both”;否则按饮品原有类型标记,期望得到结果如下:

orderIDlabel
am2both

解决方案

这里提供两种常见的SQL实现方式:

方法一:分组统计类型数量

通过分组后统计订单内的不同类型数量来判断,代码如下:

SELECT 
    orderID,
    CASE 
        WHEN COUNT(DISTINCT 类型) = 2 THEN 'both'
        ELSE MAX(类型)
    END AS label
FROM 
    订单表
GROUP BY 
    orderID;

逻辑说明:

  • 按orderID分组,COUNT(DISTINCT 类型)会统计当前订单下的不同饮品类型数量
  • 若数量为2,说明同时存在热饮和冷饮,标记为both
  • 若数量为1,说明只有一种类型,用MAX(类型)(或MIN(类型))取出该类型作为标记

方法二:使用EXISTS子查询验证

通过子查询分别验证订单是否包含两种类型,代码如下:

SELECT 
    DISTINCT o.orderID,
    CASE 
        WHEN EXISTS (SELECT 1 FROM 订单表 o2 WHERE o2.orderID = o.orderID AND o2.类型 = '热饮')
             AND EXISTS (SELECT 1 FROM 订单表 o2 WHERE o2.orderID = o.orderID AND o2.类型 = '冷饮')
        THEN 'both'
        ELSE o.类型
    END AS label
FROM 
    订单表 o;

逻辑说明:

  • 用EXISTS分别检查当前订单是否存在热饮和冷饮的记录
  • 若两个条件同时满足,标记为both
  • 否则直接取当前订单的饮品类型,DISTINCT确保每个订单只返回一条结果

内容的提问来源于stack exchange,提问作者WhoIsKi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:50:20