![]() |
Вапрос про SQL-запрос
Превед, крутые спецалисты. Есть задачка, с утра ломаю моцк, так ничо и не придумал.
Есть PostgreSQL, есть таблица, в ней три колонки: ФИО, сумма, дата. НУ, грубо говоря, описание счета, выставленного менеджером за что-то. На выходе надо поиметь годовой отчет: ФИО, Январь...Декабрь (в отдельных столбцах). В строках - соотвцно имена менеджеров и суммы выставленных счетов помесячно. Вложенными запросами сервер делать не дает, запросы уровнем ниже первого больше одной строки возвращать не могут. Соответственно, у меня выходит только запрос, возвращающий обороты в целом, без разбивки по ФИО. Я подзапросами делаю выборку сумм по месяцам, а вот как его допольнительно сгруппировать по ФИО - придумать не могу. Хелп. Теоретически - я могу конечно в управляющую софтину эту задачу перегрузить, и собирать до кучи результаты нескольких запросов с выборкой по имени, но это неспортивно, хочется всю таблицу построить одним запросом. |
Re: Вапрос про SQL-запрос
А можна скл дамп таблички щоб потреніроватись ? а то впадло самому забивати дані для експеремента
|
Re: Вапрос про SQL-запрос
Вложений: 1
Цитата:
|
Re: Re: Вапрос про SQL-запрос
Вот запрос, который пока есть, без разбивки по ФИО
SELECT (SELECT sum("OrderCost") from ordertable WHERE (date_trunc('day', "OrderCreationTime") >= '01.01.2008') AND (date_trunc('day', "OrderCreationTime") <= '31.01.2008')) AS January, (SELECT sum("OrderCost") from ordertable WHERE (date_trunc('day', "OrderCreationTime") >= '01.02.2008') AND (date_trunc('day', "OrderCreationTime") <= '28.02.2008')) AS February, (SELECT sum("OrderCost") from ordertable WHERE (date_trunc('day', "OrderCreationTime") >= '01.03.2008') AND (date_trunc('day', "OrderCreationTime") <= '31.03.2008')) AS March, (SELECT sum("OrderCost") from ordertable WHERE (date_trunc('day', "OrderCreationTime") >= '01.04.2008') AND (date_trunc('day', "OrderCreationTime") <= '30.04.2008')) AS April, (SELECT sum("OrderCost") from ordertable WHERE (date_trunc('day', "OrderCreationTime") >= '01.05.2008') AND (date_trunc('day', "OrderCreationTime") <= '31.05.2008')) AS May, (SELECT sum("OrderCost") from ordertable WHERE (date_trunc('day', "OrderCreationTime") >= '01.06.2008') AND (date_trunc('day', "OrderCreationTime") <= '30.06.2008')) AS June, (SELECT sum("OrderCost") from ordertable WHERE (date_trunc('day', "OrderCreationTime") >= '01.07.2008') AND (date_trunc('day', "OrderCreationTime") <= '31.07.2008')) AS July, (SELECT sum("OrderCost") from ordertable WHERE (date_trunc('day', "OrderCreationTime") >= '01.08.2008') AND (date_trunc('day', "OrderCreationTime") <= '31.08.2008')) AS August, (SELECT sum("OrderCost") from ordertable WHERE (date_trunc('day', "OrderCreationTime") >= '01.09.2008') AND (date_trunc('day', "OrderCreationTime") <= '30.09.2008')) AS September, (SELECT sum("OrderCost") from ordertable WHERE (date_trunc('day', "OrderCreationTime") >= '01.10.2008') AND (date_trunc('day', "OrderCreationTime") <= '31.10.2008')) AS October, (SELECT sum("OrderCost") from ordertable WHERE (date_trunc('day', "OrderCreationTime") >= '01.11.2008') AND (date_trunc('day', "OrderCreationTime") <= '30.11.2008')) AS November, (SELECT sum("OrderCost") from ordertable WHERE (date_trunc('day', "OrderCreationTime") >= '01.12.2008') AND (date_trunc('day', "OrderCreationTime") <= '31.12.2008')) AS December |
Re: Re: Вапрос про SQL-запрос
Мммм думав табличку в мускл запарити.. а то нема постгре під рукою але вона ж блін велика :)
А якщо попробувати щось тіпа GROUP BY Month(date) ? |
Re: Вапрос про SQL-запрос
select "ManagerName", sum(jan) as jan , sum(feb) as feb, sum(jun) as jun from
( select case when to_char("OrderCreationTime",'mm')='01' then sum("OrderCost") else 0 end as jan, case when to_char("OrderCreationTime",'mm')='02' then sum("OrderCost") else 0 end as feb, case when to_char("OrderCreationTime",'mm')='06' then sum("OrderCost") else 0 end as jun, "ManagerName" from ordertable group by "ManagerName",to_char("OrderCreationTime",'mm' )) as q group by "ManagerName" |
Re: Re: Вапрос про SQL-запрос
ешкин крот ! таки да, работает ! спасибо, добрый человек ! :)
|
Текущее время: 23:00. Часовой пояс GMT +3. |
Перевод: zCarot Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.