По крайней мере, вам нужно прочитать данные один раз, чтобы определить, какие столбцы вам понадобятся, затем использовать эту информацию для динамической записи нового sql, а затем запустить его.
Это необходимо, потому чтоСтруктура SQL требует, чтобы запросы / наборы данных имели фиксированные подписи (имена столбцов, типы данных и т. Д.), А не динамические (не существует нативного SQL, который делает то, что вы просите) .Что нормально с нормализованными структурами, такими как вы начинаете.
Это также означает, что SQL не обычно является подходящим местом для переформатирования ваших данных для представления вчеловек.Это то, что должен делать ваш уровень представления.
В вашем случае, похоже, вы знаете столбцы, которые вам нужны из параметров в вашем предложении WHERE
.Это означает, что ваш питон может писать динамический SQL только из этих параметров ...
SELECT
company_id,
COUNT(DISTINCT CASE WHEN case_date >= '2017-01-01' AND case_date < '2017-02-01' THEN case_number END) AS 201701_case_count,
COUNT(DISTINCT CASE WHEN case_date >= '2017-02-01' AND case_date < '2017-03-01' THEN case_number END) AS 201702_case_count,
...
COUNT(DISTINCT CASE WHEN case_date >= '2018-09-01' AND case_date < '2018-10-01' THEN case_number END) AS 201809_case_count
FROM
case
WHERE
case_date >= '2017-01-01'
AND case_date < DATE_TRUNC('MONTH', CURRENT_DATE)
GROUP BY
company_id
Теперь, если вы должны , это другой вопрос.