【发布时间】:2020-05-18 20:32:00
【问题描述】:
问题:
我需要进行一个返回 shift_id 的 SELECT 查询,其中
day_of_week 是 IN (0,1,2,3,4) 和 NOT IN (5,6),
如:
“查找轮班日为周日至周四的班次(周五至周六没有记录)”
数据库结构:
表shifts:
表shift_days:
例如
- 如果班次是周一到周五,那么
shift_days只有5条记录,day_of_week从1到5 - 如果班次是周日-周四,那么
shift_days只有5条记录,day_of_week从0到4
DB 小提琴:
附言 我能够想出这个查询:
SELECT shift_id
FROM (
SELECT shift_id, STRING_AGG(day_of_week, ',') AS 'days_of_week'
FROM shift_days
GROUP BY shift_id
) AS sdw
WHERE sdw.days_of_week = '0,1,2,3,4'
但我不知道如何保证订单升序为 '0,1,2,3,4',我想看看是否有替代使用 STRING_AGG 的方法,以防我想用于不同的SQL 方言。
附言
再次强调,匹配 day_of_week (5,6) 的任何班次都是错误匹配,因为我想排除这些记录。 并且我想包含 (0,1,2,3,4) 记录,这些记录必须全部为 0-4。
【问题讨论】:
标签: sql sql-server grouping sql-server-2017