|
Решение бытовых проблем Не вся жизнь в машине. Иногда что-то и дома сделать нужно. |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
22.06.2009, 13:49 | #1 |
Кулверстукас
|
Вапрос про SQL-запрос
Превед, крутые спецалисты. Есть задачка, с утра ломаю моцк, так ничо и не придумал.
Есть PostgreSQL, есть таблица, в ней три колонки: ФИО, сумма, дата. НУ, грубо говоря, описание счета, выставленного менеджером за что-то. На выходе надо поиметь годовой отчет: ФИО, Январь...Декабрь (в отдельных столбцах). В строках - соотвцно имена менеджеров и суммы выставленных счетов помесячно. Вложенными запросами сервер делать не дает, запросы уровнем ниже первого больше одной строки возвращать не могут. Соответственно, у меня выходит только запрос, возвращающий обороты в целом, без разбивки по ФИО. Я подзапросами делаю выборку сумм по месяцам, а вот как его допольнительно сгруппировать по ФИО - придумать не могу. Хелп. Теоретически - я могу конечно в управляющую софтину эту задачу перегрузить, и собирать до кучи результаты нескольких запросов с выборкой по имени, но это неспортивно, хочется всю таблицу построить одним запросом.
__________________
Не думай о людишках свысока. |
22.06.2009, 13:58 | #2 |
Re: Вапрос про SQL-запрос
А можна скл дамп таблички щоб потреніроватись ? а то впадло самому забивати дані для експеремента
__________________
бєздєльнік |
|
22.06.2009, 14:13 | #4 |
Кулверстукас
|
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
__________________
Не думай о людишках свысока. |
22.06.2009, 14:45 | #5 |
Re: Re: Вапрос про SQL-запрос
Мммм думав табличку в мускл запарити.. а то нема постгре під рукою але вона ж блін велика
А якщо попробувати щось тіпа GROUP BY Month(date) ?
__________________
бєздєльнік |
|
22.06.2009, 15:17 | #6 |
Адрес: г. Донецк
Сообщений: 118
Длина: 1000мкм
Диаметр: 0мм
|
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" |