我需要帮助根据某些列的值在 SQL Server 中得出结论,例如状态聚合之类的。 例如,下表是一个包含服务器任务及其状态的表格。
如果我想返回每个服务器的聚合状态,规则如下:
- 如果所有服务器任务都处于“SUBMITTED”状态,则聚合服务器状态为“AWAITING”
- 如果所有任务都处于“已完成”状态 - 聚合状态为“完成”
- 如果不满足上述情况,则聚合服务器状态为“进行中”
示例表:任务
示例查询结果:
最佳答案
你可以使用这个:
WITH table_name AS
(
SELECT 'Server 1' AS server, 'RUNNING' AS task_status, '1-1' AS task UNION ALL
SELECT 'Server 1' AS server, 'COMPLETED' AS task_status, '1-2' AS task UNION ALL
SELECT 'Server 1' AS server, 'SUBMITTED' AS task_status, '1-3' AS task UNION ALL
SELECT 'Server 2' AS server, 'COMPLETED' AS task_status, '2-1' AS task UNION ALL
SELECT 'Server 2' AS server, 'COMPLETED' AS task_status, '2-2' AS task UNION ALL
SELECT 'Server 3' AS server, 'SUBMITTED' AS task_status, '3-1' AS task UNION ALL
SELECT 'Server 3' AS server, 'SUBMITTED' AS task_status, '3-2' AS task
)
SELECT server,
CASE
WHEN COUNT(DISTINCT task_status) = 1 AND MAX(task_status) = 'SUBMITTED' THEN 'AWAITING'
WHEN COUNT(DISTINCT task_status) = 1 AND MAX(task_status) = 'COMPLETED' THEN 'DONE'
ELSE 'IN PROGRESS'
END AS completion
FROM table_name
GROUP BY server
ORDER BY server;
测试于 sqlfiddle
关于SQL:根据某些条件返回聚合结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68281247/