Column grouping depends on the result

I have one main question: I tried to create a query in SQL:

Select Date, Status From Table

My result, for example,

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

Is it possible to indicate If the status is "FAULT" from 2016-06-07, print only one line with the failed status. If it just finishes normally, printing will end normally. I would like to get this result:

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

Thank,

EDIT: I have only 2 statuses: FAILED and FINISH OK

more and more dates and results:

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

I would like to:

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

If I have FAILED status in the date, I would like to print “FAILED”, but if I do not have the status “FAILED”, I would print “FINISH OK”, is it better?

+4
source share
5 answers

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
+5

TOP 1 WITH TIES ROW_NUMBER:

SELECT TOP 1 WITH TIES  
                    [Date], 
                    [Status] 
From [Table]
ORDER BY ROW_NUMBER() OVER (PARTITION BY [Date] ORDER BY [Status] ASC)

:

Date        Status
2016-06-07  FAILED
2016-07-07  FINISH OK
2016-07-08  FAILED
+3

:

Select Date, MIN(Status) 
From Table 
Group By Date
+3

, , , , COUNT DISTINCT, :

SELECT date, 
    CASE WHEN COUNT( DISTINCT status)>1 
         THEN 'FAILED' 
         ELSE 'FINISH OK' 
    END AS status
FROM table
GROUP BY date
+1

?

SELECT Date, Status FROM Table GROUP BY Date

SELECT Date, Status FROM Table GROUP BY Status

, . ?

-1

Source: https://habr.com/ru/post/1657774/


All Articles