首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于条件的SQL选择Distinct

基于条件的SQL选择Distinct
EN

Stack Overflow用户
提问于 2016-12-27 16:30:33
回答 2查看 492关注 0票数 1

假设: STATUS中的项目状态:0-未开始,1-已验证,2-误算

希望每个ASN只显示一行,所以最简单的方法是使用不同的.

代码语言:javascript
复制
SELECT DISTINCT ASN, STATUS 
FROM STAGINGLINE

但是,我不能使用一个简单的不同,因为有多种状态的可能性,您可以得到每种状态的倍数。

结果集只显示两个“ASNs”:123和343。

示例STAGINGLINE表

案例1:

代码语言:javascript
复制
(ASN #, ITEM #, STATUS, QTY ,ACTUAL)
123   898      0       4      NULL
123   344      0       9      NULL
123   123      0       2      NULL
123   534      0       1      NULL
343   111      1       6      6

ResultSet需要:

代码语言:javascript
复制
123  NOT STARTED (because all 0)
343  VERIFIED

案例2:

代码语言:javascript
复制
(ASN #, ITEM #, STATUS, QTY ,ACTUAL)
123   898      1       4      4
123   344      0       9      NULL
123   123      0       2      NULL
123   534      0       1      NULL

ResultSet需要:

代码语言:javascript
复制
123  IN PROGRESS (because at least one of them is not in a 0 STATUS)
343  VERIFIED

案例3:

代码语言:javascript
复制
(ASN #, ITEM #, STATUS, QTY ,ACTUAL)
123   898      1       4      4
123   344      2       9      5  <- MISCOUNT
123   123      0       2      NULL
123   534      0       1      NULL

ResultSet需要:

代码语言:javascript
复制
123  MISCOUNT (because of the existence of a 2 in at least one of the STATUS column)
343  VERIFIED

案例4:

代码语言:javascript
复制
(ASN #, ITEM #, STATUS, QTY ,ACTUAL)
123   898      1       4      4
123   344      1       9      9
123   123      1       2      2
123   534      1       1      1

ResultSet需要:

代码语言:javascript
复制
123  VERIFIED (because all are STATUS of 1)
343  VERIFIED
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-27 17:39:19

你能试试这个吗

代码语言:javascript
复制
SELECT ASN, 
        CASE WHEN MAX_STATUS = 2 THEN 'MISCOUNT'
             WHEN MAX_STATUS = 0 THEN 'NOT STARTED'
             WHEN MAX_STATUS = 1 AND MIN_STATUS = 1 THEN 'VERIFIED'
             WHEN MAX_STATUS = 1 AND MIN_STATUS = 0 THEN 'IN-PROGRESS'
         END STATUS
FROM         
(SELECT ASN, MAX(STATUS) MAX_STATUS, MIN(STATS) MIN_STATUS
FROM STAGELINE
GROUP BY ASN) A
票数 2
EN

Stack Overflow用户

发布于 2016-12-27 16:33:06

你在找max()

代码语言:javascript
复制
select asn, max(status)
from t
group by asn;

也可能是max()case

代码语言:javascript
复制
select (case max(status) when 0 then 'NOT STARTED'
                         when 1 then 'VERIFIED'
                         when 2 then 'MISCOUNT'
        end)
from t
group by asn;

编辑:

规则似乎更详细一些:

代码语言:javascript
复制
select (case when max(status) = 0 then 'NOT STARTED'
             when max(status) = 1 and min(status) = max(status) then 'VERIFIED'
             when max(status) = 2 then 'MISCOUNT'
             else 'IN PROGRESS'
        end)
from t
group by asn;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41348731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档