Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Один из фильтров в виде группы колонок / 6 сообщений из 6, страница 1 из 1
25.12.2010, 09:59
    #37035063
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один из фильтров в виде группы колонок
Есть работающий запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
       select sq.ins_reg_num, sq.name, sum(sq.pay_sum) from
       (
       SELECT i.ins_reg_num,
       COALESCE
       (
             COALESCE( cor.CRP_SHORT_NAME, cor.CRP_FULL_NAME ),
             COALESCE( per.PRS_LAST_NAME, '') || ' ' || COALESCE(per.PRS_FIRST_NAME, '') || ' ' || COALESCE(per.PRS_MID_NAME, '')
       ) as name,
             CASE
                     when p.PAY_INCOME =  1  then p.pay_sum
                     else -p.pay_sum
             end as pay_sum
       from
       db2inst.sth_corporation as cor right outer join
       db2inst.sth_person as per right outer join
       DB2INST.STH_KBK as kbk INNER JOIN
       DB2INST.STH_PAY_CHECKSUM AS pcs INNER JOIN
       DB2INST.STH_PAYMENT as p INNER JOIN DB2INST.STH_INSURER AS i ON p.INS_ID=i.INS_ID
       ON p.PCS_ID=pcs.PCS_ID
       ON pcs.KBK_ID = kbk.KBK_ID
       on per.INS_ID = i.INS_ID
       on cor.INS_ID = i.INS_ID
       WHERE
       pcs.PCS_ENTER>='01.07.2010' And pcs.PCS_ENTER<='31.12.2010' And
       kbk.KBK_CODE = '39210202100081000160' and
       i.INS_REG_NUM <=  55009999999  and
       i.CT_ID >=  10  and i.CT_ID <=  31 
       ) as sq
Как видно здесь я использую фильтр kbk.KBK_CODE = '39210202100081000160'. Мне хотелось бы убрать его и сделать 4 колонки для значений поля KBK_CODE '39210202100081000160', '39210202100082000160', '39210202100083000160', '39210202100084000160'. В ms sql я бы использовал кл. слово PIVOT, но db2 не имеет его, поэтому сейчас я выполняю это в виде 4-х запросов с последующей склекой содержимого в excel. Помогите, господа!
...
Рейтинг: 0 / 0
27.12.2010, 08:37
    #37036492
golsa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один из фильтров в виде группы колонок
Код: plaintext
 kbk.KBK_CODE in ('39210202100081000160', '39210202100082000160', '39210202100083000160', '39210202100084000160')
...
Рейтинг: 0 / 0
27.12.2010, 10:00
    #37036576
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один из фильтров в виде группы колонок
dizzy1984Есть работающий запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
       select sq.ins_reg_num, sq.name, sum(sq.pay_sum) from
       (
       SELECT i.ins_reg_num,
       COALESCE
       (
             COALESCE( cor.CRP_SHORT_NAME, cor.CRP_FULL_NAME ),
             COALESCE( per.PRS_LAST_NAME, '') || ' ' || COALESCE(per.PRS_FIRST_NAME, '') || ' ' || COALESCE(per.PRS_MID_NAME, '')
       ) as name,
             CASE
                     when p.PAY_INCOME =  1  then p.pay_sum
                     else -p.pay_sum
             end as pay_sum
       from
       db2inst.sth_corporation as cor right outer join
       db2inst.sth_person as per right outer join
       DB2INST.STH_KBK as kbk INNER JOIN
       DB2INST.STH_PAY_CHECKSUM AS pcs INNER JOIN
       DB2INST.STH_PAYMENT as p INNER JOIN DB2INST.STH_INSURER AS i ON p.INS_ID=i.INS_ID
       ON p.PCS_ID=pcs.PCS_ID
       ON pcs.KBK_ID = kbk.KBK_ID
       on per.INS_ID = i.INS_ID
       on cor.INS_ID = i.INS_ID
       WHERE
       pcs.PCS_ENTER>='01.07.2010' And pcs.PCS_ENTER<='31.12.2010' And
       kbk.KBK_CODE = '39210202100081000160' and
       i.INS_REG_NUM <=  55009999999  and
       i.CT_ID >=  10  and i.CT_ID <=  31 
       ) as sq
Как видно здесь я использую фильтр kbk.KBK_CODE = '39210202100081000160'. Мне хотелось бы убрать его и сделать 4 колонки для значений поля KBK_CODE '39210202100081000160', '39210202100082000160', '39210202100083000160', '39210202100084000160'. В ms sql я бы использовал кл. слово PIVOT, но db2 не имеет его, поэтому сейчас я выполняю это в виде 4-х запросов с последующей склекой содержимого в excel. Помогите, господа!
Я правильно понял, что у вас есть 4 фиксированных значения поля KBK_CODE, и вы хотите вместо
Код: plaintext
select sq.ins_reg_num, sq.name, sum(sq.pay_sum) from ...
иметь
Код: plaintext
1.
2.
3.
4.
select sq.ins_reg_num, sq.name
, sum(sq.pay_sum) -- только для записей, где kbk.KBK_CODE = '39210202100081000160'
...
, sum(sq.pay_sum) -- только для записей, где kbk.KBK_CODE = '39210202100084000160'
from...
?
Или набор этих значений kbk.KBK_CODE и их количество может быть разное?
...
Рейтинг: 0 / 0
30.12.2010, 05:41
    #37041905
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один из фильтров в виде группы колонок
Mark Barinstein,

На выходе мне надо 6 колонок sq.ins_reg_num, sq.name, sum(sq.pay_sum)(для 39210202100081000160), sum(sq.pay_sum)(для 39210202100082000160), sum(sq.pay_sum)(для 39210202100083000160), sum(sq.pay_sum)(для 39210202100084000160). Спасибо за ответ!
...
Рейтинг: 0 / 0
30.12.2010, 10:25
    #37042110
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один из фильтров в виде группы колонок
dizzy1984На выходе мне надо 6 колонок sq.ins_reg_num, sq.name, sum(sq.pay_sum)(для 39210202100081000160), sum(sq.pay_sum)(для 39210202100082000160), sum(sq.pay_sum)(для 39210202100083000160), sum(sq.pay_sum)(для 39210202100084000160). Спасибо за ответ!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
       select sq.ins_reg_num, sq.name
        , sum(case KBK_CODE when '39210202100081000160' then sq.pay_sum end) s1
       ...
       , sum(case KBK_CODE when '39210202100084000160' then sq.pay_sum end) s4 
       from
       (
       SELECT i.ins_reg_num,
       COALESCE
       (
             COALESCE( cor.CRP_SHORT_NAME, cor.CRP_FULL_NAME ),
             COALESCE( per.PRS_LAST_NAME, '') || ' ' || COALESCE(per.PRS_FIRST_NAME, '') || ' ' || COALESCE(per.PRS_MID_NAME, '')
       ) as name,
             CASE
                     when p.PAY_INCOME = 1 then p.pay_sum
                     else -p.pay_sum
             end as pay_sum
        , kbk.KBK_CODE 
       from ...
       WHERE
       pcs.PCS_ENTER>='01.07.2010' And pcs.PCS_ENTER<='31.12.2010' 
        And kbk.KBK_CODE in ('39210202100081000160', '39210202100082000160', '39210202100083000160', '39210202100084000160') 
       and i.INS_REG_NUM <= 55009999999 and
       i.CT_ID >= 10 and i.CT_ID <= 31
       ) as sq
...
Рейтинг: 0 / 0
31.12.2010, 10:25
    #37043487
dizzy1984
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Один из фильтров в виде группы колонок
Спасибо, после праздников обязательно проверю
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Один из фильтров в виде группы колонок / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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