2015-01-02 2 views
0

Я в основном пытаюсь написать запрос, где, если событие происходит за последние 200 дней, оно отображает значения столбцов для A, B, C, D, E, F Но в этом же запросе, если событие не происходит в течение последних 200 дней (201 дней & за ее пределами), он будет отображать только значения в столбцах A и B.Заменить ненулевые значения пустым или нулевым значением в SQL oracle SELECT-запрос

Мой текущий запрос я попытался сделать два оператора select с помощью оператора UNION. Я попытался сделать инструкции CASE для столбцов C, D, E и F для SELECT после UNION, но я не мог заставить его работать.

Этот текущий запрос отображает все значения для всех столбцов независимо от того, произошел ли он < или> 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

Попробуйте CASE в Oracle -

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. Пожалуйста, отметьте это как ответ :-) –

Смежные вопросы