如何筛选出特定人员所有关联分支均放假的日期?
解决方案:筛选特定人员所有关联分支均放假的日期
要搞定这个需求,核心就是要找出每个节假日当天,@t1里指定的所有分支都在@t2中有对应的放假记录的日期。下面是具体的实现思路和代码:
实现逻辑
- 先统计@t1里特定人员关联的分支总数,用来后续判断每个日期是否满足「所有分支都放假」的条件
- 从节假日表@t3出发,关联分支放假表@t2,只保留属于@t1的分支的放假记录
- 按节假日日期分组,统计每个日期下有放假记录的指定分支数量,当这个数量等于总分支数时,就说明该日期所有指定分支都处于放假状态
完整SQL代码
-- 定义表变量并初始化数据(保留原数据结构) declare @t1 table ( BranchID int ) declare @t2 table ( BranchID int, Holiday date ) declare @t3 table ( Holiday date ) insert into @t1 values(10),(11) insert into @t2 values (10,'2018-01-01'),(12,'2018-01-01'),(10,'2018-01-05'),(11,'2018-01-05') insert into @t3 values('2018-01-01'),('2018-01-02'),('2018-01-03'),('2018-01-04'),('2018-01-05') -- 统计指定分支的总数量 declare @totalBranches int = (select count(*) from @t1) -- 筛选符合条件的日期 select t3.Holiday from @t3 t3 left join @t2 t2 on t3.Holiday = t2.Holiday and t2.BranchID in (select BranchID from @t1) group by t3.Holiday having count(distinct t2.BranchID) = @totalBranches
结果说明
执行这段代码后,得到的结果是:
Holiday ---------- 2018-01-05
原因很简单:2018-01-01只有分支10有放假记录,分支11没有;而2018-01-05分支10和11都有对应的放假记录,完全符合「所有关联分支均放假」的要求。
内容的提问来源于stack exchange,提问作者Raymond Morphy
相关产品推荐
相关产品推荐

