Транспонирование столбцов строк и подсчет количества экземпляров на столбец в sqlite

У меня есть таблица, структурированная как

|creationDate|rule.      |position| 
|01.01.2018  |squid:S1132|12      |
|01.01.2018  |squid:S1132|14      |
|01.01.2018  |squid:S1132|19      |
|01.01.2018  |squid:S1121|12      |
|01.01.2018  |squid:S1121|14      |
|01.02.2018  |squid:S1130|12      |

Моя цель - подсчитать количество правил на дату, представив их в разных столбцах.

|creationDate| S1132      | S1121 | S1130 |
|01.01.2018  | 3          |2      | 0     |
|01.02.2018  | 0          |0      | 1     |

У меня всего 180 правил ... Можно ли сделать это одним запросом?

Выполнение этого запроса

select creationDate , count("creationDate") as "squid:S1132" 
from SONAR_ISSUES 
where rule='squid:S1132' group by creationDate

Я получаю этот результат

|creationDate|S1132  | 
|01.01.2018  |3      |

Я могу сделать аналогичный запрос для каждого правила, но тогда я не могу их объединить ...

Вы действительно хотите сделать сводную таблицу со 180 столбцами в строке, или вы можете работать с кучей строк (date, rule, count) или результатами, возвращаемыми, скажем, как объект json? И то, и другое было бы намного проще реализовать.

Shawn 26.10.2018 08:52
0
1
38
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете попробовать использовать условную агрегацию

ДЕМО

select 
   creationDate, 
   count(case when rule='squid:S1132' then "creationDate" end) as "squid:S1132",
   count(case when rule='squid:S1121' then "creationDate" end) as "squid:S1121" ,
   count(case when rule='squid:S1130' then "creationDate" end) as "squid:S1130" 
from SONAR_ISSUES 
group by creationDate
Ответ принят как подходящий

попробуйте, используя случай, когда

select creationDate ,count(case when rule='squid:S1132' then 1 end) as S1132,
count(case when rule='squid:S1121' then 1 end) as S1121,
count(case when rule='squid:S1130' then 1 end) as S1130    
from SONAR_ISSUES 
group by 
creationDate

Другие вопросы по теме