从多个记录中返回一条记录

时间:2017-11-28 14:42:19

标签: sql

我有两张表,合并时会给我以下信息

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

3 个答案:

答案 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,请参阅其他答案。