如果语句在SQL中的where子句里面

时间:2018-05-22 03:01:45

标签: sql sql-server sql-server-2008

我有以下数据集

DNo     Quantity  Sites ID      Desc
----------------------------------------------------------------------------
18050075    9       2   ADD6    Number of client reporting sites
18050075    9       2   ADD7    Annual Maintenance
18050075    9       2   ADD8    Ongoing Fees
18050075    1       2   ADD9    Employee Meeting (per day plus incurred expenses)
18050075    0       2   ADD10   Custom Data file Layouts
18050075    0       2   ADD11   Error Correction for more than 2% errors in a single 

在存储过程中的select语句中,如果数量大于0,我只想返回ADD9,ADD10,ADD11。有人可以告诉我如何在where子句中编写if语句,这样我才能应用条件到特定ID

所以我的结果集应该如下所示

 18050075   9   2   ADD6    Number of client reporting sites
 18050075   9   2   ADD7    Annual Maintenance
 18050075   9   2   ADD8    Ongoing Fees
 18050075   1   2   ADD9    Employee Meeting (per day plus incurred expenses)

由于

5 个答案:

答案 0 :(得分:1)

下面怎么样?它依赖于将您的数据拆分为两个单独的查询,然后附加。

select * -- this gets all data other than these ids
from your_data_table
where ID not in ('ADD9', 'ADD10', 'ADD11')

union all -- this joins everything toghether

select * -- this gets all requested data for these ids
from your_data_table
where ID in ('ADD9', 'ADD10', 'ADD11') and Quantity > 0

答案 1 :(得分:0)

从表中选择*(ID在('ADD9','ADD10','ADD11')和数量> 0)或ID不在('ADD9','ADD10','ADD11')

答案 2 :(得分:0)

这是你想要的吗?

SELECT *
FROM yourTable
WHERE ID NOT IN ('ADD9', 'ADD10', 'ADD11') OR Quantity > 0;

答案 3 :(得分:0)

对于您作为输出提供的结果集

/

对于您在说明中提到的结果集

SELECT *
FROM tableName
WHERE Quantity > 0

注意:您实际上是在询问描述和给定输出中提到的两个不同输出,因此请根据您的需要决定一个。

答案 4 :(得分:0)

可能的替代方法是使用嵌套的CASE函数。 e.g:

select * 
from your_data_table
where 1 = (CASE WHEN ID IN ('ADD9', 'ADD10', 'ADD11') THEN CASE WHEN Quantity > 0 THEN 1 END ELSE 1 END)

逻辑的工作原理如下:

IF ID IN ('ADD9', 'ADD10', 'ADD11')
THEN 
    IF Quantity > 0 
    THEN 
        Include It
    ELSE
        Exclude It
ELSE
    Include It