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

SQL Server分组查询:筛选包含指定天数列表的PriceCardId

筛选包含指定Days集合的PriceCardId(SQL Server)

这是个典型的集合包含验证需求,针对你的数据表和要求,我提供两种实用的SQL查询方案,都能准确得到预期结果:

方案一:GROUP BY + HAVING 统计法

这种方法通过分组统计来验证是否包含所有指定Days值,效率较高,适合目标列表元素较多的场景:

SELECT PriceCardId
FROM YourTableName -- 替换成你的实际表名
WHERE Days IN (2, 4, 5, 6)
GROUP BY PriceCardId
HAVING COUNT(DISTINCT Days) = 4 -- 4对应指定列表的元素总数

逻辑说明:

  1. 先用WHERE Days IN (...)筛选出所有属于目标列表的记录
  2. 按PriceCardId分组,统计每组中不同Days的数量
  3. 只有当统计数量等于目标列表的元素总数时,说明该PriceCardId包含了所有指定的Days值,没有遗漏

方案二:多EXISTS验证法

这种方法逻辑更直观,逐一验证每个目标Days是否存在于对应PriceCardId的记录中,适合目标列表元素较少的场景:

SELECT DISTINCT PriceCardId
FROM YourTableName pc -- 替换成你的实际表名
WHERE EXISTS (SELECT 1 FROM YourTableName WHERE PriceCardId = pc.PriceCardId AND Days = 2)
  AND EXISTS (SELECT 1 FROM YourTableName WHERE PriceCardId = pc.PriceCardId AND Days = 4)
  AND EXISTS (SELECT 1 FROM YourTableName WHERE PriceCardId = pc.PriceCardId AND Days = 5)
  AND EXISTS (SELECT 1 FROM YourTableName WHERE PriceCardId = pc.PriceCardId AND Days = 6)

逻辑说明:

对于每个PriceCardId,我们逐个检查目标列表中的每个Days值是否都存在于该ID的记录中,只有所有条件都满足的ID才会被选中。

注意事项:

  • 记得把代码中的YourTableName替换成你的实际数据表名称
  • 如果目标列表可能包含重复值,需要根据业务逻辑调整统计方式(但示例中的列表是唯一整数,所以COUNT(DISTINCT)是合适的)
  • 为了提升查询效率,建议在PriceCardId和Days字段上创建联合索引

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:36:17