- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
SELECT x.org_spec_id, (
SELECT count(c.id) FROM customers c , government_customers_require gcr
WHERE c.org_spec_id=x.org_spec_id AND gcr.customer_id=c.id
) as bal_ins,
sum(x.type_b1) as type_b1, sum(x.type_b2) as type_b2, sum(x.type_b3) as type_b3, sum(x.bus_debit) as bus_debit,
sum(x.gost_ac1) as gost_ac1, sum(x.gost_ac2) as gost_ac2, sum(x.nav_ac1) as nav_ac1, sum(x.nav_ac2) as nav_ac2,
\'-\' as price1, \'-\' as price2, \'-\' as price3, \'-\' as price4, sum(x.scope_b1) as scope_b1,
sum(x.scope_b2) as scope_b2, sum(x.scope_b3) as scope_b3, sum(x.scope_b4) as scope_b4, sum(x.scope_b5) as scope_b5,
sum(x.scope_b6) as scope_b6, sum(x.add11) as add11, sum(x.add12) as add12, sum(x.add21) as add21,
sum(x.add22) as add22, sum(x.add23) as add23, sum(x.add31) as add31, sum(x.add32) as add32, sum(x.add33) as add33
FROM (SELECT c.org_spec_id, b.id , c.id as bal_ins,
case when bsd.id is not null then 1 else 0 end as bus_debit,
case when bsd.id is null then case when bm.type_id = 1 then 1 else 0 end else 0 end as type_b1,
case when bsd.id is null then case when bm.type_id = 2 then 1 else 0 end else 0 end as type_b2,
case when bsd.id is null then case when bm.type_id = 3 then 1 else 0 end else 0 end as type_b3,
case when bsd.id is null AND bm.type_id = 1 then case when gst.accepted then 1 else 0 end else 0 end as gost_ac1,
case when bsd.id is null AND bm.type_id = 1 then case when gst.accepted then 0 else 1 end else 0 end as gost_ac2,
case when bsd.id is null AND bm.type_id = 1 then case when nav.id is not null then 1 else 0 end else 0 end as nav_ac1,
case when bsd.id is null AND bm.type_id = 1 then case when nav.id is not null then 0 else 1 end else 0 end as nav_ac2,
case when bsd.id is null AND b.scope_id = 2 then 1 else 0 end as scope_b1,
case when bsd.id is null AND b.scope_id = 1 then 1 else 0 end as scope_b2,
case when bsd.id is null AND b.scope_id = 3 then 1 else 0 end as scope_b3,
case when bsd.id is null AND b.scope_id = 4 then 1 else 0 end as scope_b4,
case when bsd.id is null AND b.scope_id = 6 then 1 else 0 end as scope_b5,
case when bsd.id is null AND b.scope_id = 5 then 1 else 0 end as scope_b6,
case when bsd.id is null then case when add1.id is not null then case when add1.selected_variant=\'on\' then 1 else 0 end else 1 end else 0 end as add11,
case when bsd.id is null then case when add1.id is not null then case when add1.selected_variant=\'off\' then 1 else 0 end else 0 end else 0 end as add12,
case when bsd.id is null then case when add2.id is not null then case when add2.selected_variant=\'on\' then 1 else 0 end else 0 end else 0 end as add21,
case when bsd.id is null then case when add2.id is not null then case when add2.selected_variant=\'off\' then 1 else 0 end else 0 end else 0 end as add22,
case when bsd.id is null then case when add2.id is not null then case when add2.selected_variant=\'no\' then 1 else 0 end else 1 end else 0 end as add23,
case when bsd.id is null then case when add3.id is not null then case when add3.selected_variant=\'on\' then 1 else 0 end else 0 end else 0 end as add31,
case when bsd.id is null then case when add3.id is not null then case when add3.selected_variant=\'off\' then 1 else 0 end else 0 end else 0 end as add32,
case when bsd.id is null then case when add3.id is not null then case when add3.selected_variant=\'no\' then 1 else 0 end else 1 end else 0 end as add33
lohpider 29.05.2012 22:11 # −15
lohpider 29.05.2012 22:12 # −15
Lure Of Chaos 30.05.2012 00:21 # 0
eth0 30.05.2012 07:19 # 0
DBdev 30.05.2012 10:26 # −1
А у писавшего запрос просто еще не прокачано умение декомпозиции.
lucidfoxGovno 30.05.2012 11:53 # −11
asfalanaft 05.06.2012 16:32 # −1
DBdev 07.06.2012 19:30 # −1
Где конкретно написал?
В том, что архитектура БД - говно?
По одним кейсам, которые городит автор запроса понятно, что она - говно. За некоторые "selfdescribed" имена полей можно архитектора слать лесом. Если честно, то воняет эта БД, как и большинство решений сделанных для гос. контор.
Или в том, что у писавшего запрос не прокачано умение декомпозиции?
Вы на 100% уверены, что проверять "case when bsd.id is null" надо именно столько раз?
И Вы уверены, что нельзя написать SUM(CASE ...)?
asfalanaft 07.06.2012 22:46 # −1
DBdev 08.06.2012 11:50 # 0
лолшто? Желаю, чтоб Вам лично прислали на доработку БД с именами таблиц типа dfasdf, rtyrtgh, tyjhghj, gfhhfg и полями в них colaaa, colbbb, colccc и без документации.
> Как вы поняли по ебанутым кейсам, о чем сами и упомянули, что архитектура - говно?
Элементарно, кейсы указывают на то, что для транспонирования таблицы (перевод строк в колонки) приходится изрядно изощрятся. Возможно, Вы не поверите, но можно архитектурно предусмотреть так, чтоб телодвижений было меньше. Смотрим сюда: "b.scope_id = 2 then 1 else 0 end as scope_b1," и "b.scope_id = 1 then 1 else 0 end as scope_b2," и тоже самое для 5 и 6. Это что? В справочнике 1, а в отчет идет как 2? Скажите, что это так сложилось исторически, то SCD Вам в помощь. Смотрим сюда "case when bsd.id is null". Идентификатор может быть NULL? Ересь, на костер.
> Ни одного пруфа,
Надеюсь, накормил Вас достаточно.
> пока слышно только кукарекание
Если Вы про "> ко-ко", то спешу огорчить Вас - Вы не в теме.
И напоследок, хотел бы поинтересоваться у Вас, а что Вы лично считаете в Вашем старт топике говнокодом?
eth0 08.06.2012 13:36 # +2
asfalanaft 09.06.2012 22:08 # −4
По поводу имен полей: исполнителю банально не удалось найти англоязычные аналоги для российских бюрократических реалий.
Так что все еще ни одного пруфа.