2014-02-24 30 views
0

這是查詢:在SQL中使用案例進行行計算

SELECT CASE Count(RADLD.request_id) 
     WHEN 0 THEN (SELECT Sum(Datediff(dd, rad.clarity_dt, Getdate()))) 
     ELSE (SELECT Sum(Datediff(dd, radld.clarity_dt, Getdate()))) 
     END 
FROM ppa.request_add_details rad, 
     ppa.request_add_details_loop_details radld, 
     ppa.request req 
WHERE radld.request_id = rad.request_id 
     AND radld.request_id = req.request_id 
     AND rad.clarity_dt IS NOT NULL 
     AND (rad.recomm_dt IS NULL) 
     AND rad.modified_by !=- 1 
     AND rad.request_id = req.request_id 
     AND ((radld.loop_sequence = CASE 
            WHEN radld.loop_sequence IS NOT NULL THEN 1 
            END) 
       OR (radld.loop_sequence IS NULL)) 

這是我怎麼想它的工作:如果一個REQUEST_ID,在radld THN條目被發現,它應該去

select sum(datediff(dd,radld.clarity_dt,getdate())) 

,如果沒有相應的條目在radld發現那麼就應該去

select sum(datediff(dd,rad.clarity_dt,getdate())) ..

實際發生的事情是:如果對於任何請求記錄被發現在radld ..那麼它會將select sum(datediff(dd,radld.clarity_dt,getdate()))應用於所有記錄。

請幫

+1

'mysql' *和*'SQL server'? –

+0

sql server 2008 – user3345655

+0

'CASE'是SQL Server是一個**表達式**,它可以返回一個值 - 它是** NOT **可以從ppa.request執行代碼 –

回答

0

在您的查詢,你已經做了內部連接,這意味着它會回報只有那些所有表(RAD,radld和REQ)的請求。因此,將永遠不會像Count(RADLD.request_id)這樣的情況爲0.因此,所有記錄都會有相同的結果。您應該使用LEFT or RIGHT JOIN並通過檢查NULL數據而不是COUNT來檢查它。所以你可以得到正確的結果你想要的。

嘗試類似下面:

SELECT CASE WHEN radld.request_id IS NOT NULL 
      THEN (SELECT Sum(Datediff(dd, radld.clarity_dt, Getdate()))) 
      ELSE (SELECT Sum(Datediff(dd, rad.clarity_dt, Getdate()))) END 
FROM ppa.request req 
LEFT JOIN ppa.request_add_details_loop_details radld ON req.request_id = radld.request_id 
LEFT JOIN ppa.request_add_details rad ON radld.request_id = rad.request_id 
WHERE rad.clarity_dt IS NOT NULL 
AND rad.recomm_dt IS NULL 
AND rad.modified_by !=- 1 
AND ((radld.loop_sequence = 1) OR (radld.loop_sequence IS NULL)) 
+0

的流控制語句req inner join ppa.request_add_details拉德在 rad.request_id = req.request_id LEFT OUTER JOIN PPA.REQUEST_ADD_DETAILS_LOOP_DETAILS radld – user3345655

+0

我想這也是,但沒有運氣 – user3345655

+0

檢查我的答案更新與查詢 –