我有两张表,合并时会给我以下信息
JobID Task ID Task Status
1 1 1
1 2 3
1 3 1
1 4 1
1 5 3
2 1 1
2 3 1
2 5 1
我想要显示的是每个作业ID一行,以及基于以下内容的状态
当所有任务状态均为1时,作业状态为"已启动"
如果一个任务状态设置为3,那么作业状态为"已发布"
所以上面的表格如下:
Job ID Job Status
1 Issued
2 Started
答案 0 :(得分:3)
使用GROUP BY
组合具有相同作业ID的项目。使用MIN(TaskStatus)
和MAX(TaskStatus)
查看所有项目是否相同:
SELECT
JobId
, CASE
WHEN MIN(TaskStatus) = 1 AND MAX(TaskStatus) = 1 THEN 'Started'
WHEN MAX(TaskStatus) = 3 THEN 'Issued'
ELSE NULL
END AS JobStatus
FROM MyTable
GROUP BY JobId
答案 1 :(得分:3)
您可以使用MAX
功能确定列表中是否有3。
SELECT
JobID,
CASE
WHEN MAX(TaskStatus) = 1 THEN 'Started',
WHEN MAX(TaskStatus) = 3 THEN 'Issued'
ELSE 'No Status'
END AS 'JobStatus'
FROM
table
GROUP BY
JobID
答案 2 :(得分:3)
这个答案使用完整的条件聚合,假设你的数据可能会改变。
SELECT
[Job ID],
CASE WHEN SUM(CASE WHEN [Task Status] = 3 THEN 1 ELSE 0 END) > 0
THEN 'Issued'
WHEN SUM(CASE WHEN [Task Status] = 1 THEN 1 ELSE 0 END) = COUNT(*)
THEN 'Started'
ELSE 'Other' END AS [Job Status]
FROM yourTable
GROUP BY
[Job ID];
对于此查询的更简洁版本,假设唯一的状态是1和3,请参阅其他答案。