我有两个select语句,我想生成两列,每个语句并排使用这两个select语句中的两个select语句
查询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:缺少表情。谁能告诉我这个问题?
感谢。
答案 0 :(得分: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
子句现在需要涵盖两个时间间隔。
答案 1 :(得分:0)
如果col1
和col2
之间没有任何关系,但您只想并排显示它们,则可以执行以下操作:
SELECT COUNT(DISTINCT CASE_ID) ,NULL
from t1
AND MODIFIED_DATE BETWEEN TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD')-56
AND TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD')-49
union
SELECT NULL, COUNT(DISTINCT CASE_ID)
from t1
AND MODIFIED_DATE BETWEEN TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD')-49
AND TO_DATE('{RUN_DATE_YYYYMMDD}','YYYYMMDD')-42
输出看起来像是:
C1 C2
12 NULL
13 NULL
. NULL
. NULL
NULL 45
NULL 98
NULL .
NULL .
答案 2 :(得分:0)
这对你有用吗?
with w_q1 as (
select case_id, row_number() over (order by modified_date) rid
from (
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
)
),
w_q2 as (
select case_id, row_number() over (order by modified_date) rid
from (
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
)
)
select w_q1.case_id, w_q2.case_id
from w_q1
full outer join w_q2
on w_q1.rid = w_q2.rid
/
它只需要你的两个“单独”结果,为它们分配一种“行ID”,并使用它来加入它们......使用完整的外部连接以确保没有任何内容被切断。