如何在SQL Server中实现基于发票产品ID的条件计算查询
SQL Server 带条件的查询计算实现
需求规则
- 若某一
invoice仅包含ProdId = 1或2的产品,结果为Price * amount - 若
invoice包含其他产品(如 ProdId=3),结果为Price * amount * 1.01(注:原规则描述的“+1%”对应总价上浮1%,与示例结果匹配)
示例数据
| invoice | ProdId | Price | amount | result |
|---|---|---|---|---|
| 1 | 1 | 10 | 2 | 20.2 |
| 1 | 2 | 20 | 1 | 20.2 |
| 1 | 3 | 10 | 2 | 20.2 |
| 2 | 1 | 10 | 1 | 10 |
| 2 | 2 | 20 | 2 | 20 |
实现SQL语句
通过子查询判断每个 invoice 是否包含非1/2的产品,再执行条件计算:
SELECT invoice, ProdId, Price, amount, CASE WHEN EXISTS ( SELECT 1 FROM YourTableName t2 WHERE t2.invoice = t1.invoice AND t2.ProdId NOT IN (1,2) ) THEN ROUND(Price * amount * 1.01, 1) ELSE Price * amount END AS result FROM YourTableName t1;
关键说明
- 用
EXISTS子查询快速检测当前 invoice 是否存在不符合条件的产品 - 匹配示例结果保留一位小数,使用
ROUND函数处理精度 - 替换
YourTableName为实际业务表名
内容的提问来源于stack exchange,提问作者Huy Hoang Nguyen
相关产品推荐
相关产品推荐

