如何使用不同的过滤器加入同一个表的两列?

时间:2014-10-17 06:51:58

标签: sql oracle oracle10g

我希望以下列方式加入同一张表的两个 ...

QUERY 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数据库中的单个结果集加入? 我的意思是应该如下:

MRCY DT OLD DT

3 个答案:

答案 0 :(得分:0)

只需使用UNIONUNION ALL即可。联盟将删除重复项。

但是,你为什么要那样做?您可以在同一查询中同时使用这两个过滤器。

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。你不知道Y2K的错误吗?

答案 1 :(得分:0)

您可能需要以下内容:

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;

答案 2 :(得分:0)

SELECT MRCY, :new_dt as DT, :old_dt "OLD_DT"
  FROM BILLING WHERE BILL_DATE IN (:new_dt, :old_dt)
 ORDER BY MRCY;