показать данные в группе по формату

#sql #join #group-by

#sql #Присоединиться #группировать по

Вопрос:

 Name       Status
A           Fail
B           open 
c           fail
A           Success
A           open
A           Success
  

Я хочу выводить как,

 Name   S_open   S_Success   S_All
A        1        2          4
B        1        0          1
C        0        0          1
  

Ответ №1:

Попробуйте так

 SELECT Name,
   SUM(CASE WHEN Status='open' THEN 1 END) AS S_open,
   SUM(CASE WHEN Status='Success' THEN 1 END) AS S_Success,
   SUM(1) AS S_All
FROM Table
GROUP BY Name;
  

Ответ №2:

вы также можете попробовать это;

 SELECT 
       upper(name),
       SUM(S_OPEN) S_open,
       SUM(S_SUCCESS) S_Success,
       count(*) S_All
FROM 
(
       select name, 
              CASE WHEN upper(status) = 'OPEN' THEN 1 ELSE 0 END S_OPEN,
              CASE WHEN upper(status) = 'SUCCESS' THEN 1 ELSE 0 END S_SUCCESS
       from TABLE
) t
GROUP BY upper(name) order by 1