Edd*_*e D 7 sql t-sql sql-server case distinct-values
我有一个表格列出项目和这些项目的状态.问题是某些项目有多个不同的状态条目.例如.
HOST Status
1.1.1.1 PASS
1.1.1.1 FAIL
1.2.2.2 FAIL
1.2.3.3 PASS
1.4.2.1 FAIL
1.4.2.1 FAIL
1.1.4.4 NULL
Run Code Online (Sandbox Code Playgroud)
我需要为每个资产返回一个状态.
Run Code Online (Sandbox Code Playgroud)HOST Status 1.1.1.1 PASS 1.2.2.2 FAIL 1.2.3.3 PASS 1.4.2.1 FAIL 1.1.4.4 No Results
我一直试图用T-SQL Case语句做到这一点,但不能完全正确.条件是任何Pass +任何东西都是Pass,Fail + No Results是失败,Null是No Results.
尝试使用case
语句转换为有序结果并对其进行分组,最后,您需要转换回漂亮的、人类可读的答案:
with cte1 as (
SELECT HOST,
[statNum] = case
when Status like 'PASS' then 2
when Status like 'FAIL' then 1
else 0
end
FROM table
)
SELECT HOST, case max(statNum) when 2 then 'PASS' when 1 then 'FAIL' else 'No Results' end
FROM cte1
GROUP BY HOST
Run Code Online (Sandbox Code Playgroud)
注意:我使用 CTE 语句希望让事情变得更清晰一些,但一切都可以在一个中完成SELECT
,如下所示:
SELECT HOST,
[Status] = case max(case when Status like 'PASS' then 2 when Status like 'FAIL' then 1 else 0 end)
when 2 then 'PASS'
when 1 then 'FAIL'
else 'No Result'
end
FROM table
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1743 次 |
最近记录: |