假设: STATUS中的项目状态:0-未开始,1-已验证,2-误算
希望每个ASN只显示一行,所以最简单的方法是使用不同的.
SELECT DISTINCT ASN, STATUS
FROM STAGINGLINE但是,我不能使用一个简单的不同,因为有多种状态的可能性,您可以得到每种状态的倍数。
结果集只显示两个“ASNs”:123和343。
示例STAGINGLINE表
案例1:
(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 6ResultSet需要:
123 NOT STARTED (because all 0)
343 VERIFIED案例2:
(ASN #, ITEM #, STATUS, QTY ,ACTUAL)
123 898 1 4 4
123 344 0 9 NULL
123 123 0 2 NULL
123 534 0 1 NULLResultSet需要:
123 IN PROGRESS (because at least one of them is not in a 0 STATUS)
343 VERIFIED案例3:
(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 NULLResultSet需要:
123 MISCOUNT (because of the existence of a 2 in at least one of the STATUS column)
343 VERIFIED案例4:
(ASN #, ITEM #, STATUS, QTY ,ACTUAL)
123 898 1 4 4
123 344 1 9 9
123 123 1 2 2
123 534 1 1 1ResultSet需要:
123 VERIFIED (because all are STATUS of 1)
343 VERIFIED发布于 2016-12-27 17:39:19
你能试试这个吗
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发布于 2016-12-27 16:33:06
你在找max()吗
select asn, max(status)
from t
group by asn;也可能是max()和case
select (case max(status) when 0 then 'NOT STARTED'
when 1 then 'VERIFIED'
when 2 then 'MISCOUNT'
end)
from t
group by asn;编辑:
规则似乎更详细一些:
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;https://stackoverflow.com/questions/41348731
复制相似问题