首页 > 解决方案 > SQL中where子句中的if语句

问题描述

我有以下数据集

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 语句,以便我只能将条件应用于特定身份证

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

 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)

谢谢

标签: sqlsql-serversql-server-2008

解决方案


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

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

推荐阅读