如何使用不同的过滤器连接相同表格的两列?
问题描述:
我想加入 2分列同桌的以下列方式...如何使用不同的过滤器连接相同表格的两列?
查询1:
SELECT MRCY,DT FROM BILLING WHERE BILL_DATE='01-SEP-14' ORDER BY MRCY;
QUERY 2:
SELECT DT "OLD DT" FROM BILLING WHERE BILL_DATE='01-AUG-14' ORDER BY MRCY;
如何加入的输出这些查询作为Oracle数据库中的单个结果集? 我的意思是列应该apear如下:
MRCY DT OLD DT
答
您可能希望在以下几点:
SELECT MRCY,
MAX(CASE WHEN BILL_DATE = DATE '2014-09-01' THEN DT END) as DT,
MAX(CASE WHEN BILL_DATE = DATE '2014-08-01' THEN DT END) as OLD_DT,
FROM BILLING
WHERE BILL_DATE IN (DATE '2014-09-01', DATE '2014-08-01')
GROUP BY MRCY
ORDER BY MRCY;
+0
它工作!谢谢 ! – Rajnikant 2014-10-18 05:08:51
答
只需使用UNION
或UNION ALL
。 Union会删除重复项。
但是,你为什么要那样做?您可以在同一个查询中使用两个过滤器。
SELECT MRCY , DT
FROM BILLING
WHERE BILL_DATE IN (to_date('01-SEP-2014', 'DD-MON-YYYY'),
to_date('01-AUG-14', 'DD-MON-YYYY')
ORDER BY MRCY;
在内部,它将被重写为OR
逻辑。
此外,请注意您使用的是文字而不是日期。这是处理日期的不正确方法。 Oracle会做一个隐式的数据转换。您必须始终使用TO_DATE
。
而且,一年应该总是YYYY
而不仅仅是YY
。你不知道千年虫问题吗?
答
SELECT MRCY, :new_dt as DT, :old_dt "OLD_DT"
FROM BILLING WHERE BILL_DATE IN (:new_dt, :old_dt)
ORDER BY MRCY;
你有什么要完成?第一个返回两列和第二个列。样本数据和期望的结果总是有用的。 – 2014-10-17 07:05:17