Как в SQLite динамическое количество строк сделать столбцами и по ним выполнить запрос?
Например есть таблица продаж, в ней есть следующие поля: кто_продал, год_продажи и прочие.
Нужно сделать запрос который вернет:
| Кто продал | в 2020 | в 2021 | в 2022 |
|---|---|---|---|
| Саша | 123 | 156 | 163 |
| Маша | 111 | 118 | 99 |
| Паша | 0 | 56 | 87 |
| Даша | 0 | 12 | 0 |
Количество столбцов и строк динамическое.
Ответы (1 шт):
Автор решения: Герман Борисов
→ Ссылка
Так как SQLite не поддерживает инструкцию pivot, придётся использовать разворот case'ом
SELECT
кто_продал
,SUM(CASE WHEN год_продажи = 2020 THEN ... END) AS "в 2020"
,SUM(CASE WHEN год_продажи = 2021 THEN ... END) AS "в 2021"
,SUM(CASE WHEN год_продажи = 2022 THEN ... END) AS "в 2022"
FROM таблица_продаж
GROUP BY кто_продал
Агрегатную функцию выбрать по вкусу. SUM если нужна общая сумма, COUNT если количество. Вместо ... подставить нужный столбец.
Так как строки с CASE у нас почти одинаковые, их можно генерировать динамически, достаточно написать цикл по всем годам, например, получив их SQL-запросом
SELECT DISTINCT год_продажи FROM таблица_продаж
Но генерировать запрос придётся клиентскому приложению. На чистом SQL это не сделать