Как в SQLite динамическое количество строк сделать столбцами и по ним выполнить запрос?

Рейтинг: 1Ответов: 1Опубликовано: 08.02.2023

Например есть таблица продаж, в ней есть следующие поля: кто_продал, год_продажи и прочие.

Нужно сделать запрос который вернет:

Кто продал в 2020 в 2021 в 2022
Саша 123 156 163
Маша 111 118 99
Паша 0 56 87
Даша 0 12 0

Количество столбцов и строк динамическое.

Ответы

▲ 0

Так как 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 это не сделать