powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сводная таблица
23 сообщений из 48, страница 2 из 2
Сводная таблица
    #39654652
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3. SUM не там. я ранее исправился.
...
Рейтинг: 0 / 0
Сводная таблица
    #39654653
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

SELECT
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2016-1" THEN churn_charges.total_with_vat END) as 2016-1,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2016-2" THEN churn_chargestotal_with_vat END) as 2016-2,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2016-3" THEN churn_charges.total_with_vat END) as 2016-3,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2016-4" THEN churn_charges.total_with_vat END) as 2016-4,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2016-5" THEN churn_charges.total_with_vat END) as 2016-5,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2016-6" THEN churn_charges.total_with_vat END) as 2016-6,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2016-7" THEN churn_charges.total_with_vat END) as 2016-7,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2016-8" THEN churn_charges.total_with_vat END) as 2016-8,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2016-9" THEN churn_charges.total_with_vat END) as 2016-9,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2016-10" THEN churn_charges.total_with_vat END) as 2016-10,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2016-11" THEN churn_charges.total_with_vat END) as 2016-11,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2016-12" THEN churn_charges.total_with_vat END) as 2016-12,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2017-1" THEN churn_charges.total_with_vat END) as 2017-1,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2017-2" THEN churn_charges.total_with_vat END) as 2017-2,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2017-3" THEN churn_charges.total_with_vat END) as 2017-3,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2017-4" THEN churn_charges.total_with_vat END) as 2017-4,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2017-5" THEN churn_charges.total_with_vat END) as 2017-5,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2017-6" THEN churn_charges.total_with_vat END) as 2017-6,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2017-7" THEN churn_charges.total_with_vat END) as 2017-7,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2017-8" THEN churn_charges.total_with_vat END) as 2017-8,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2017-9" THEN churn_charges.total_with_vat END) as 2017-9,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2017-10" THEN churn_charges.total_with_vat END) as 2017-10,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2017-11" THEN churn_charges.total_with_vat END) as 2017-11,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2017-12" THEN churn_charges.total_with_vat END) as 2017-12,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2018-1" THEN churn_charges.total_with_vat END) as 2018-1,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2018-2" THEN churn_charges.total_with_vat END) as 2018-2,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2018-3" THEN churn_charges.total_with_vat END) as 2018-3,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM'), ="2018-4" THEN churn_charges.total_with_vat END) as 2018-4,
churn_charges.account_number, churn_accounts.base_company, churn_charges.service
FROM public.churn_charges
left join churn_accounts
on churn_charges.account_number = churn_accounts.account_number
where churn_charges.account_number like '200%' and churn_charges.service ='IP' and churn_accounts.base_company like '%Новосибирск%'
group by churn_charges.account_number, churn_charges.service, churn_accounts.base_company;
...
Рейтинг: 0 / 0
Сводная таблица
    #39654654
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4. Попробуй на одном месяце.
...
Рейтинг: 0 / 0
Сводная таблица
    #39654657
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
SELECT sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM') ="2016-10" THEN churn_charges.total_with_vat END) as 2016-10,
	churn_charges.account_number, churn_accounts.base_company, churn_charges.service
FROM public.churn_charges left join churn_accounts
	on churn_charges.account_number = churn_accounts.account_number
	where churn_charges.account_number like '200%' and churn_charges.service ='IP' and churn_accounts.base_company like '%Новосибирск%'
group by churn_charges.account_number, churn_charges.service, churn_accounts.base_company; 
...
Рейтинг: 0 / 0
Сводная таблица
    #39654658
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

Вот так должно выглядеть?) И вопрос ещё, в таком случае дата вообще в группировке не участвует?

SELECT
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM') = "2016-1" THEN churn_charges.total_with_vat END) as 2016-1,
churn_charges.account_number, churn_accounts.base_company, churn_charges.service
FROM public.churn_charges
left join churn_accounts
on churn_charges.account_number = churn_accounts.account_number
where churn_charges.account_number like '200%' and churn_charges.service ='IP' and churn_accounts.base_company like '%Новосибирск%'
and to_char(churn_charges.charge_date, 'YYYY-MM') between '2016-01-01' and '2016-01-31'
group by churn_charges.account_number, churn_charges.service, churn_accounts.base_company;
...
Рейтинг: 0 / 0
Сводная таблица
    #39654660
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты просил "где даты будут в столбцах"
Соответственно дат в группировке нет
...
Рейтинг: 0 / 0
Сводная таблица
    #39654661
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

Попробовал, не работает пока, к сожалению. Ладно, посижу потыкаю код, что-нибудь да получится

Спасибо огромное вам, что уделили время и за помощь. Если получится, отпишу сюда, как оно должно всё же выглядеть)
...
Рейтинг: 0 / 0
Сводная таблица
    #39654663
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может не 2016-1, а 2016-02 ?

Какую ошибку пишет?
Я в синтаксисе PostgreSQL не силен.
...
Рейтинг: 0 / 0
Сводная таблица
    #39654667
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

а pg никаких ошибок не выдаёт, просто пустое поле, где должны быть итоговые данные запроса
...
Рейтинг: 0 / 0
Сводная таблица
    #39654673
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй 2016-10
Убери период из фильтра
...
Рейтинг: 0 / 0
Сводная таблица
    #39654682
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+ двойные кавычки убери
...
Рейтинг: 0 / 0
Сводная таблица
    #39654685
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

Пробовал и с фильтром и без, кавычки тоже убирал, пока тишина)
...
Рейтинг: 0 / 0
Сводная таблица
    #39654687
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так заработало:

http://www.sqlfiddle.com/#!17/fd14d/1

Код: sql
1.
2.
3.
4.
5.
6.
SELECT id,
sum(CASE WHEN to_char(T.dat, 'YYYY-MM') = '2018-01' THEN T.summa END) as p201801,
sum(CASE WHEN to_char(T.dat, 'YYYY-MM') = '2018-02' THEN T.summa END) as p201802,
sum(CASE WHEN to_char(T.dat, 'YYYY-MM') = '2018-03' THEN T.summa END) as p201803
FROM T
group by ID; 



Убери минус из имени поля, и начни его с буквы
...
Рейтинг: 0 / 0
Сводная таблица
    #39654694
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

Про минус что-то не понял

SELECT churn_charges.account_number,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM') = '2016-10' THEN churn_charges.total_with_vat END) as 2016-10,
sum(CASE WHEN to_char(churn_charges.charge_date, 'YYYY-MM') = '2016-11' THEN churn_charges.total_with_vat END) as 2016-11
FROM public.churn_charges
group by churn_charges.account_number;

Так всё равно не пашет, может в с датой что-то не так
...
Рейтинг: 0 / 0
Сводная таблица
    #39654704
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

ну и у меня стоит 10 версия, а не 9.6, хотя по идее вряд ли они синтаксисом могут отличаться
...
Рейтинг: 0 / 0
Сводная таблица
    #39654705
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o.makarov,
Не as 2018-01
A as p201801
...
Рейтинг: 0 / 0
Сводная таблица
    #39654756
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

действительно, после этого запустился, сейчас запрос по всей истории запустить. Спасибо вам большое, что потратили столько времени и решили мою проблему, без вас бы я долго разбирался. Добра вам и позитива!)
...
Рейтинг: 0 / 0
Сводная таблица
    #39654757
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как текучку сделаешь, пробуй переписать всё на PIVOT.
...
Рейтинг: 0 / 0
Сводная таблица
    #39654760
o.makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
982183,

хорошо, обязательно перепишу, пока что там просто много всего непонятного, когда читал первый раз об этом, со временем разберусь, мне это интересно
...
Рейтинг: 0 / 0
Сводная таблица
    #39656061
angel_zar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз напишу, с изменением количества месяцев, это на PG получится динамический PIVOT. Это лучше делать на клиенте, например в SSRS есть такой компонент, Matrix и не надо ни чего городить в запросе, запрос возвращает нужную информацию, а как ее отобразить (развернуть) это уже проблема клиентской части.
...
Рейтинг: 0 / 0
Сводная таблица
    #39656068
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть скорость получатся приемлемая, то почему бы и нет.
Если тормозить будет, что лучше в SSRS передавать уже собранные/свернутые/агрегированные данные.
...
Рейтинг: 0 / 0
Сводная таблица
    #39656070
982183
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Другое дело, а есть необходимость пересчитывать старые месяца, или достаточно пересчитать текущий и предпоследний?
Данные задним числом правят?
...
Рейтинг: 0 / 0
Сводная таблица
    #39656194
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o.makarov,

psql версии 10+ может делать пивотирование через `\crosstabview` команду:
https://www.postgresql.org/docs/current/static/app-psql.html
https://wiki.postgresql.org/wiki/Crosstabview
...
Рейтинг: 0 / 0
23 сообщений из 48, страница 2 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сводная таблица
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]