Помогите с запросиком

dr100
Дата: 10.08.2005 17:31:35
Есть таблица
ID_VZNOSI  ID_FIRM  ID_ACCOUNT    DATE_SP         SUMA
----------   -------    ---------- --------      -------
1084            414       2      16.03.04       250 
1086            81        1      14.01.04       120
1087            27        1      16.02.04       129,6
1088            60        1      16.02.04       129,6
1089            228       3      18.03.04       129,6

т.е. приходы денег от фирм по нескольким счетам (пока их (ID_ACCOUNT) 13)..

Нужно выдать запрос показывающий фирму и общую суму по каждому счету из 13.., т.е.:
ID_FIRM             Cума по счету 1   Cума по счету 2 ....
---------- 		----------
        13              96		        ...
        14              359                     ...
        20              3653,76
        21              864
        22              14762,8
Я написал запросик что-то типа:
select id_firm, (select sum(suma) from vznosi xxx where id_account=1 and xxx.id_firm=yyy.id_firm)  Schet_1,
select id_firm, (select sum(suma) from vznosi xxx where id_account=2 and xxx.id_firm=yyy.id_firm)  Schet_2,
....
select id_firm, (select sum(suma) from vznosi xxx where id_account=13 and xxx.id_firm=yyy.id_firm)  Schet_13
from vznosi yyy
group by id_firm;
Подскажите,нельзя ли как то более рационально?
Vadim Zh
Дата: 10.08.2005 17:40:18
Аналитические функции помогут.

С уважением, Вадим.
flop
Дата: 10.08.2005 17:45:38
SELECT id_firm,
       sum(decode(id_account,1,suma,0)) as Schet_1,
       sum(decode(id_account,2,suma,0)) as Schet_2,
       sum(decode(id_account,3,suma,0)) as Schet_3,
       ....
       sum(decode(id_account,12,suma,0)) as Schet_12,
       sum(decode(id_account,13,suma,0)) as Schet_13
  FROM vznosi
  GROUP BY id_firm
AlexOI
Дата: 10.08.2005 17:48:43
Может так?

select id_firm, sum(decode(id_account,1,suma,0)) Schet_1,
sum(decode(id_account,2,suma,0)) Schet_2,
....
sum(decode(id_account,13,suma,0)) Schet_13
from vznosi yyy
group by id_firm;

Если не нравится decode можно использовать CASE. Не надо будет читать одну и ту же таблицу 14 раз
dr100
Дата: 10.08.2005 18:10:04
Vadim Zh
Аналитические функции помогут.

С уважением, Вадим.


Спасибо за ответы. Вадим, подскажите, а как тут использовать аналитические функции?
flop
Дата: 10.08.2005 18:10:56
Забавно, автор интересуется данным запросом начиная с 2003 года под разные СУБД. Какая интересная у людей жизнь. :)
dr100
Дата: 10.08.2005 18:15:39
flop
Забавно, автор интересуется данным запросом начиная с 2003 года под разные СУБД. Какая интересная у людей жизнь. :)


Да, да...такая жизнь..База остается, субд меняется)
Vadim Zh
Дата: 10.08.2005 18:18:07
Счетов много и меняются ли они?

С уважением, Вадим.
dr100
Дата: 10.08.2005 18:22:09
Vadim Zh
Счетов много и меняются ли они?

С уважением, Вадим.


Как я говорил, их пока 13. Не исключено, что добавиться могут пару.
Vadim Zh
Дата: 10.08.2005 18:38:15
Все-таки decode спасает,
единственно, придется переписывать
запрос в случае добавления счета.

С уважением, Вадим.