2015-01-02 104 views
0

我基本上試圖編寫一個查詢,如果在最近200天內發生事件,它將顯示列值爲A,B,C, d,E,F 但在這同一查詢,如果事件不中的過去200天內發生(201天&以後),它只會在列A和B.顯示值用SQL中的空值或空值替換非空值SELECT查詢

我目前的查詢我試着使用UNION語句來執行兩個選擇語句。我嘗試在UNION之後爲SELECT列C,D,E和F做CASE語句,但我無法使其工作。

此當前查詢顯示所有列的所有值,而不管它是否出現<或> 200天。

SELECT te.columna, 
 
    \t c.columnb, 
 
    \t te.columnc, 
 
    \t v.columnd, 
 
    \t v.columne, 
 
    \t v.columnf 
 
\t FROM \t table1 te, table2 c, table3 v 
 
    \t WHERE te.columng_id=c.columng_id 
 
    \t AND v.columne=te.columne 
 
    \t AND te.columnc > sysdate-200 
 
    \t UNION 
 
    \t SELECT te.columna, 
 
    \t c.columnb, 
 
    \t te.columnc, 
 
    \t v.columnd, 
 
    \t v.columne, 
 
    \t v.columnf 
 
    \t FROM \t table1 te, table2 c, table3 v 
 
    \t WHERE te.columng_id=c.columng_id 
 
    \t AND v.columne=te.columne 
 
    \t AND te.columnc < sysdate-200

+0

的MySQL或Oracle?他們不一樣。 – Barmar

+0

Oracle,對不起。我是新來的整個SQL的東西,所以我一直忘記哪一個是哪個。我正在使用SQL Plus來執行此查詢。 – Tootally

+0

我必須注意到,使用'te.columnc> sysdate-200'和'te.columnc ')和「小於或等於」('<=')或者「小於」('<')「大於或等於」 > =')。您可能還想使用'TRUNC()'函數截斷日期。 –

回答

2

嘗試在OracleCASE -

SELECT te.columna, 
      c.columnb, 
      CASE WHEN te.columnc >= SYSDATE -200 
      THEN te.columnc 
      ELSE NULL 
     END columnc, 
     CASE WHEN te.columnc >= SYSDATE -200 
      THEN te.columnd 
      ELSE NULL 
     END columnd, 
     CASE WHEN te.columnc >= SYSDATE -200 
      THEN v.columne 
      ELSE NULL 
     END columne, 
     CASE WHEN te.columnc >= SYSDATE -200 
      THEN v.columnf 
      END columnf 
    FROM table1 te, table2 c, table3 v 
     WHERE te.columng_id=c.columng_id 
    AND v.columne=te.columne 
+0

這工作就像奇蹟!非常感謝你,我想我沒有意識到我必須不斷重複每個單獨列的列名和> = SYSDATE。 – Tootally

+0

感謝您的反饋。你可以安全地避免UNION聲明。請標記爲已回答:-) –