2014-09-26 123 views
0

我想知道爲什麼當ENVIRON ='Dev/Int'沒有行時,以下查詢不會給出'N/A'。它在查詢結果中返回null。我嘗試做NVL(COUNT(*)),但那也不管用。case statement not go to else

有什麼想法?

在此先感謝。

SELECT G1.NAME, 
    (SELECT CASE 
    WHEN COUNT(*) > 0 AND ticket IS NOT NULL THEN 'Solved' 
    WHEN COUNT(*) > 0 AND ticket IS NULL THEN 'Done' 
    ELSE 'N/A' 
    END 
    FROM TABLE1 
    WHERE ENVIRON='Dev/Int' AND G1.NAME=NAME GROUP BY ENVIRON, ticket) "Dev/Int" 
FROM TABLE1 G1 group by G1.NAME 

回答

3

它沒有給出任何行,因爲您將它們全部過濾掉。 case裏面的的查詢。當沒有要處理的行時,它將返回NULL。

我想你只是想條件聚合。該子查詢似乎沒有必要:

SELECT G1.NAME, 
     (CASE WHEN SUM(CASE WHEN ENVIRON = 'Dev/Int' then 1 else 0 END) > 0 AND ticket IS NOT NULL 
      THEN 'Solved' 
      WHEN SUM(CASE WHEN ENVIRON = 'Dev/Int' then 1 else 0 END) > 0 AND ticket IS NULL 
      THEN 'Done' 
      ELSE 'N/A' 
     END) as "Dev/Int" 
FROM TABLE1 
group by G1.NAME; 

編輯:

哎呀,上面留下ticketsum()的。我想你想的邏輯有票在sum()條件:

SELECT G1.NAME, 
     (CASE WHEN SUM(CASE WHEN ENVIRON = 'Dev/Int' AND ticket IS NOT NULL then 1 else 0 END) > 0 
      THEN 'Solved' 
      WHEN SUM(CASE WHEN ENVIRON = 'Dev/Int' AND ticket IS NULL then 1 else 0 END) > 0 
      THEN 'Done' 
      ELSE 'N/A' 
     END) as "Dev/Int" 
FROM TABLE1 
group by G1.NAME; 

我很驚訝,原來的查詢工作都並沒有得到那種子查詢返回多行的錯誤。

+0

令人敬畏的戈登,非常感謝。 – user3447526 2014-09-26 16:07:10

+0

注意到這會返回名稱的多行(例如與名稱關聯的多張票據)。我需要添加票據給其他組抱怨「ORA-00979:不是GROUP BY表達式」。我怎麼能不通過票?謝謝 – user3447526 2014-09-26 16:35:58