如何在SQL中比较多列?实现多列相等判断并生成计算列
解决SQL多列相等判断的问题
你的SQL语句存在语法逻辑错误:SQL不支持ReqUntilReleased= ReqUntilReadyReleased = ReqUntilDelivery = ReqUntilResolved这种连续相等的写法。这种表达式会先计算ReqUntilReleased=ReqUntilReadyReleased得到布尔值(0或1,依SQL方言而定),再将该布尔值与ReqUntilDelivery比较,最后再和ReqUntilResolved比较,完全达不到判断四个字段值全部相等的目的。
下面是两种正确的实现方式:
方法一:使用AND连接逐字段比较
SELECT IssueID, ReqUntilReleased, ReqUntilReadyReleased, ReqUntilDelivery, ReqUntilResolved, CASE WHEN ReqUntilReleased = ReqUntilReadyReleased AND ReqUntilReadyReleased = ReqUntilDelivery AND ReqUntilDelivery = ReqUntilResolved THEN CAST(ReqUntilResolved AS VARCHAR(10)) -- 转换为字符串,保证与ELSE返回类型一致 ELSE 'Invalid' END AS Cumulative FROM Table1;
方法二:利用行内聚合判断唯一值数量
如果你的SQL支持VALUES行构造器,可以通过统计四个字段的唯一值数量是否为1来判断:
SELECT IssueID, ReqUntilReleased, ReqUntilReadyReleased, ReqUntilDelivery, ReqUntilResolved, CASE WHEN (SELECT COUNT(DISTINCT val) FROM (VALUES (ReqUntilReleased), (ReqUntilReadyReleased), (ReqUntilDelivery), (ReqUntilResolved)) AS t(val)) = 1 THEN CAST(ReqUntilResolved AS VARCHAR(10)) ELSE 'Invalid' END AS Cumulative FROM Table1;
针对你提供数据的示例结果(假设ReqUntilDelivery字段值与其他字段匹配逻辑一致):
| IssueId | ReqUntilResolved | ReqUntilReadyReleased | ReqUntilReleased | ReqUntilInvoice | Cumulative |
|---|---|---|---|---|---|
| 40 | 1 | 0 | 0 | 0 | Invalid |
| 40 | 0 | 0 | 0 | 0 | 0 |
| 41 | 2 | 1 | 2 | 1 | Invalid |
| 42 | 1 | 1 | 1 | 1 | 1 |
内容的提问来源于stack exchange,提问作者Fatemeh
相关产品推荐
相关产品推荐

