一尘不染

从同一表中选择具有不同WHERE条件的两列

sql

我有两个选择语句,我想生成两列,每个列并排使用一个选择语句中的这两个选择语句

查询1

 SELECT DISTINCT CASE_ID 
 from t1 
 WHERE MODIFIED_DATE BETWEEN TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD')-56 
                       AND TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD')-49



CASE_ID
12
13
14
15
17

查询2

SELECT DISTINCT CASE_ID
from t1 
WHERE MODIFIED_DATE BETWEEN TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD')-49 
                      AND TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD')-42



CASE_ID
45
98
67
90
76
82
61

最终输出应类似于:

C1 C2
12 45
13 98
14 67
15 90
17 76
     82
     61

谁能告诉我该怎么做?

谢谢你。


更新

我从答案中尝试过的查询之一:

SELECT DISTINCT 
             case when 
                MODIFIED_DATE BETWEEN TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD') - 56 
                                  AND TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD') - 49
               then CASE_ID 
             end as c1,
        DISTINCT 
               case when 
                  MODIFIED_DATE BETWEEN TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD')-49  
                                    AND TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD')-42 
                  then CASE_ID 
               end as c2
from t1 
WHERE MODIFIED_DATE 
         BETWEEN TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD') - 56 
             AND TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD') - 42

我得到的是ORA-00936:缺少表达。谁能告诉我问题所在?

谢谢。


阅读 121

收藏
2021-05-16

共1个答案

一尘不染

您正在寻找经过过滤的聚合:

SELECT COUNT(DISTINCT 
             case when 
                MODIFIED_DATE BETWEEN TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD') - 56 
                                  AND TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD') - 49
               then CASE_ID 
             end) as c1,
        COUNT(DISTINCT 
               case when 
                  MODIFIED_DATE BETWEEN TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD')-49  
                                    AND TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD')-42 
                  then CASE_ID 
               end) as c2
from t1 
WHERE MODIFIED_DATE 
         BETWEEN TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD') - 56 
             AND TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD') - 42

请注意,该WHERE子句现在需要覆盖两个间隔。

2021-05-16