首页 > 解决方案 > 从同一数据集中选择 2 个日期集?

问题描述

假设我有一个查询选择过去 90 天的所有销售额。我希望能够在案例/时间的基础上隔离某些行,并且无法完全弄清楚如何做到这一点。案例陈述取决于日期,因此:如果日期介于 3/1 和 5/31 之间,那么我想选择任何月底(3/31、4/30、5/31 和今天)的销售额,否则,如果日期不在 3/1 和 5/31 之间,那么我只想选择过去 3 个月末。

到目前为止,我尝试的是在 WHERE 子句中插入一个 Case/When 语句,但这似乎并不合理。还有其他方法可以解决这个问题吗?

作为参考,@monthends 表包含以下单列:

月末

@insideRule 表包含类似的内容:

内幕规则

查询:

 SELECT *
   FROM mytable
   WHERE asofdate IN 
     CASE WHEN asofdate BETWEEN '3-1-2019' AND '5-31-2019' THEN
       (SELECT * FROM @insideRule)
     ELSE
       (SELECT * FROM @monthends)
     END 

当我执行上述操作时,出现“IN”周围的语法错误

标签: sqlsql-server

解决方案


你不想exists表达case

IF EXISTS (SELECT 1 FROM mytable WHERE aasofdate BETWEEN '2019-03-01' AND '2019-05-31')
   SELECT *
   FROM @insideRule
   ELSE 
   SELECT * 
   FROM @monthends

推荐阅读