在SQL中的where子句中使用多个if if语句

时间:2013-11-15 15:59:40

标签: sql if-statement boolean where-clause

我正在尝试将多个if if语句插入到SQL中的where子句中。

例如,如果location = 1,则使用日期范围keydate> = '09 / 30/13 23:00:00.000'和keydate< '10 / 31/13 23:00:00.000',如果location = 2则为另一个日期范围。

我之所以这样做是因为我对不同的时区有很多疑问,我想将所有这些问题合并为一个。以下是查询的简化示例。

我已经阅读过使用case语句和布尔逻辑作为解决类似问题的方法,但是无法弄清楚这是否适用于多个标准(即多个办公室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'

2 个答案:

答案 0 :(得分: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' 
    )

答案 1 :(得分:0)

您可以使用“解码”功能。这是语法

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

因此,如果表达式'expr'等于s1,它将返回r1;对于s2,r2;如果没有匹配,它将考虑默认值。这是您可以在查询中使用的示例代码段...

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

因此,如果X ='A',则上面的片段将返回50; 10如果X ='B'Orelse默认为50。 希望这会有所帮助:)