2014-10-17 52 views
-1

我想加入 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

+0

你有什麼要完成?第一個返回兩列和第二個列。樣本數據和期望的結果總是有用的。 – 2014-10-17 07:05:17

回答

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; 
+0

它工作!謝謝 ! – Rajnikant 2014-10-18 05:08:51

0

只需使用UNIONUNION 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。你不知道千年蟲問題嗎?

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