SQL条件案例

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)

我需要为每个资产返回一个状态.

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
Run Code Online (Sandbox Code Playgroud)

我一直试图用T-SQL Case语句做到这一点,但不能完全正确.条件是任何Pass +任何东西都是Pass,Fail + No Results是失败,Null是No Results.

che*_*525 4

尝试使用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)