2013-11-15 178 views
0

我試圖在SQL中的where子句中插入多個if語句。如果位置= 1,則使用日期範圍keydate> = '09/30/13 23:00:00.000'和關鍵日期<'10/31/13 23:00:00.000',如果位置= 2則是另一個日期範圍。在SQL中的where子句中使用多個if語句

我想這樣做的原因是因爲我對不同的時區有很多查詢,我想將所有這些合併爲一個。以下是該查詢的簡化示例。

我讀過有關使用情況報表和布爾邏輯的方式來解決類似的問題,但不能弄清楚這是否會爲多種標準(即多個辦公ID)工作

也寫作的語法是具有挑戰性,由於我缺乏經驗。

select sum(r.revenue) as revenue 
from customer_stats 
where cus.office_id = '1' --would like to insert "if" cus.office_id = 1 then use keydate 
and keydate >= '09/30/13 23:00:00.000' and keydate < '10/31/13 23:00:00.000' 

回答

0

這一切都在你如何嵌套你的where子句。

select sum(r.revenue) as revenue 
from customer_stats 
where 
    (
     cus.office_id = '1' 
     and keydate >= '09/30/13 23:00:00.000' 
     and keydate < '10/31/13 23:00:00.000' 
    ) 
    OR 
    (
     cus.office_id = '2' 
     and keydate >= '08/30/13 23:00:00.000' 
     and keydate < '09/31/13 23:00:00.000' 
    ) 
+0

感謝您的快速回答!我現在會試試這個。測試多個辦公室之前的一個問題是:這會成倍增加執行時間,還是會線性增加執行時間? – user2996849

+0

它不會是指數。只要確保將office_id和keydate編入索引並且查詢應該非常快。 –

+0

hm我在兩個小辦公室嘗試了這種方法,並在30分鐘後停止了查詢。我大大縮小了標準,並使用OR的工作,但如果我使用了所有辦公室ID,我認爲查詢需要幾天時間才能完成,這是行不通的。 – user2996849

0

您可以使用「解碼」功能。下面是語法

DEOCDE(expr,s1,r1,s2,r2,....., default) 

所以,如果表達式 'expr的' 等於S1,它會返回R1;對於s2,r2;如果沒有匹配時,將考慮缺省值..這裏有一個例子片斷您可以在查詢中使用...

DECODE(X,'A',50,'B',10,50) 

所以上面的代碼將返回50,如果X =「A」; 10如果X ='B'默認爲Orelse 50. 希望這會有所幫助:)