У меня есть таблица Fiddle здесь
+------+------+------+---------+
| id_a | id_b | City | result |
+------+------+------+---------+
| 101 | 101 | NY | Ready |
| 102 | 102 | TN | Sold |
| 103 | | TN | Missing |
| 104 | 104 | NY | Ready |
| | 105 | NY | Missing |
| 106 | 106 | TN | Ready |
| 107 | 107 | TN | Sold |
+------+------+------+---------+
Мне нужен результат вроде
+------+-----+----------+---------+------------+
| City | CNT | No_Ready | No_sold | No_Missing |
+------+-----+----------+---------+------------+
| NY | 3 | 2 | 0 | 1 |
| TN | 4 | 1 | 2 | 1 |
+------+-----+----------+---------+------------+
Logi c просто подсчитывает каждый результат для каждого город. Теперь я получаю результат с запросом ниже
select 'NY' as City,sum(case when city='NY' then 1 else 0 end) as CNT,
sum(case when city='NY' and result='Ready' then 1 else 0 end) as No_Ready,
sum(case when city='NY' and result='Sold' then 1 else 0 end) as No_sold,
sum(case when city='NY' and result='Missing' then 1 else 0 end) as No_Missing
from source
union all
select 'TN' as City,sum(case when city='TN' then 1 else 0 end) as CNT,
sum(case when city='TN' and result='Ready' then 1 else 0 end) as No_Ready,
sum(case when city='TN' and result='Sold' then 1 else 0 end) as No_sold,
sum(case when city='TN' and result='Missing' then 1 else 0 end) as No_Missing
from source
Но проблема в том, что если город будет добавлен, мне придется снова написать еще один UNION ALL
. Могу ли я сделать это для всего города, доступного в столбце CITY
, не добавляя объединение всех для каждого города