2014-02-09 32 views
1

我試圖從Oracle 11g數據庫構建查詢以在報表中使用。我需要用兩個表A和B來獲得表中的列日和表列B值從表中加入單個日期列與另一個表日期範圍oracle 11 g

表A:

Dt 
01/01/2014 
02/01/2014 
03/01/2014 
04/01/2014 
05/01/2014 
06/01/2014 

表B:

Value  Start Dt  End Dt 
XXXX  01/01/2014 03/01/2014 
YYYY  05/01/2014 06/01/2014 

最終輸出:

A.Dt    B.Value 
01/01/2014   XXXX 
02/01/2014   XXXX 
03/01/2014   XXXX 
04/01/2014   NULL 
05/01/2014   YYYY 
06/01/2014   YYYY 

請幫助做一個單一的SQL查詢以上。

感謝

回答

1

並非所有的連接是等值連接 - 您可以使用BETWEEN運營商在你的連接條件。

SELECT   a.dt, b.value 
FROM   a 
LEFT OUTER JOIN b ON a.dt BETWEEN b.start_dt and b.end_dt 
+0

+1但你爲什麼要對齊每行的*秒*字?這很荒謬。當然更難以閱讀,而且空白僅用於可讀性。 – Bohemian

+0

這是一個古老的習慣 - 我喜歡將SQL保留字與對象名分開。但我承認,使用更簡單的SQL('SELECT col FROM tab WHERE col2 ='value'')可能會更好。 – Mureinik

0
SELECT A.DT ,B.VALUE 

FROM A 

LEFT OUTER JOIN 

(

SELECT START_DT,VALUE FROM B 

UNION 

SELECT END_DT,VALUE FROM B 

) B 

ON A.DT=B.START_DT 

ORDER BY A.DT 

這應該給你想要的輸出。

相關問題