SQL:根据某些条件返回聚合结果

我需要帮助根据某些列的值(例如状态聚合)在 SQL Server 中得出结论。例如,下面是一个包含服务器任务及其状态的表格。

如果我想返回每个服务器的聚合状态,这里是规则:

  • 如果所有服务器任务都处于“提交”状态,则聚合服务器状态为“等待”
  • 如果所有任务都处于“完成”状态 - 聚合状态为“完成”
  • 如果不满足上述情况,则聚合服务器状态为“IN PROGRESS”

示例表:任务

服务器 任务状态 任务
服务器 1 跑步 1-1
服务器 1 完全的 1-2
服务器 1 已提交 1-3
服务器 2 完全的 2-1
服务器 2 完全的 2-2
服务器 3 已提交 3-1
服务器 3 已提交 3-2

回答

你可以用这个:

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:根据某些条件返回聚合结果的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>