根据结果​​对列进行分组

Bob*_*Bob 4 sql sql-server

我有一个基本问题:我尝试在SQL中创建一个查询:

Select Date, Status From Table
Run Code Online (Sandbox Code Playgroud)

我的结果是,例如,

2016-06-07   FAILED
2016-06-07   FINISH OK 
2016-07-07   FINISH OK
2016-07-07   FINISH OK
Run Code Online (Sandbox Code Playgroud)

是否可以判断2016-06-07中的状态是否为"FAILED",只打印一行失败状态.如果它刚刚完成,打印完成就可以了.我想要这个结果:

2016-06-07   FAILED
2016-07-07   FINISH OK
Run Code Online (Sandbox Code Playgroud)

谢谢,

编辑:我只有2个状态:FAILED和FINISH OK

越来越多的日期和结果:

2016-06-07   FAILED
2016-06-07   FINISH OK
2016-06-07   FINISH OK
2016-06-07   FINISH OK
2016-06-07   FINISH OK

 2016-07-07   FINISH OK
 2016-07-07   FINISH OK
 2016-07-07   FINISH OK
 2016-07-07   FINISH OK
 2016-07-07   FINISH OK

2016-07-08    FINISH OK
2016-07-08    FINISH OK
2016-07-08    FINISH OK
2016-07-08    FAILED
2016-07-08    FINISH OK
Run Code Online (Sandbox Code Playgroud)

我想拥有:

2016-06-07   FAILED
2016-07-07   FINISH OK
2016-07-08   FAILED
Run Code Online (Sandbox Code Playgroud)

如果我在某个日期有一个FAILED状态,我想打印'FAILED',但如果我没有任何'FAILED'状态,我会打印'FINISH OK',它会更好吗?

Jua*_*eza 5

使用CASE带条件的agregation.

第一个COUNT是向您展示如何工作.这将计算每个日期组的失败次数.

然后CASE检查是否有1个或更多失败

 SELECT Date,
        COUNT(CASE WHEN Status = 'FAILED' THEN 1 END) as total_fails,           
        CASE WHEN Count(CASE WHEN Status = 'FAILED' THEN 1 END) > 0 
             THEN 'FAILED'
             ELSE 'FINISH OK'
        END as Status 
FROM Table
GROUP BY Date
Run Code Online (Sandbox Code Playgroud)