如果你有一个快速的分钟,我有一个SQL问题。
以下是我的数据的样子。现在我正在尝试编写一个查询,根据LOGGING STATUS对ID号进行分类,如下所示。输出ID状态需要显示为一行(一个值)。
如果ID#9630的记录状态仅为失败,则输出将为FAIL
ID STATUS ZIP-CODE
9630 FAIL 8959
9630 FAIL 8959
如果ID#19630的登录状态仅为成功,那么输出将为SUCCESS
ID STATUS ZIP-CODE
19630 SUCCESS 72259
19630 SUCCESS 72216
如果id#1963的加载状态为失败并且成功如下,则输出将为BOTH
ID STATUS ZIP-CODE
18963 fail 92259
18963 success 96216
18963 fail 62296
我试图找出如何编写SQL以实现上述输出。
答案 0 :(得分:2)
也许这就是你想要的:
select id,
(case when min(status) = max(status) then max(status) else 'both'
end) as status
from t
group by id;
如果您只想要给定状态的值:
select (case when min(status) = max(status) then max(status) else 'both'
end) as status
from t
where id = @id;
答案 1 :(得分:2)
SELECT id,IIF(MIN(status)=MAX(status),MAX(status),'both') AS [status]
FROM t
GROUP BY id
答案 2 :(得分:1)
对于实际的最终目标来说,这有点含糊不清,但从我的解释来看,这就是我在这种情况下所写的内容。
SELECT DISTINCT ID, STATUS =
CASE StatusCheck
WHEN MIN(STATUS) >= MAX(STATUS) THEN MIN(STATUS)
WHEN MAX(STATUS) >= MIN(STATUS) THEN MAX(STATUS)
ELSE 'BOTH'
END,
[ZIP-CODE]
FROM [LOGGING STATUS].[STATUS]
ORDER BY ID
考虑到你正在使用MSSQL,你还应该考虑在T-SQL中查看GROUP-BY
子句。如果这不是您正在寻找的东西,那么这也可能是一个开始的地方。