- 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
- 35
- 36
SELECT
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D1 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D1 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D2 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D2 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D3 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D3 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D4 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D4 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D5 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D5 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D6 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D6 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D7 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D7 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D8 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D8 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D9 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D9 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D10 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D10 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D11 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D11 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D12 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D12 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D13 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D13 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D14 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D14 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D15 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D15 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D16 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D16 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D17 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D17 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D18 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D18 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D19 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D19 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D20 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D20 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D21 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D21 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D22 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D22 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D23 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D23 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D24 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D24 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D25 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D25 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D26 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D26 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D27 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D27 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D28 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D28 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D29 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D29 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D30 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D30 = S_KODGR.K_KOD)) +
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D31 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D31 = S_KODGR.K_KOD)) AS H_ALL,
GR.ID_GRAF
FROM GRAF_RAB AS GR
WHERE GR.GOD = 2014
AND GR.K_T_GR = 1
1) Говеная архитектура БД: В базе месяц лежит в одной таблице с полями D1, D2, D3 и т.д. Потому нельзя просто взять и одним запросом связать две таблицы, а приходится делать 31 подзапрос
2) Говеня БД: используется access, который не может и шагу ступить без vba. В итоге функция nz, написанная на vba просто не видна OleDbDataAdapter-у и приходится использовать iif. И 31 подзапрос превращается в 62
3) Надо получить значения из двух полей. 62 подзапроса превращаются в 124(Здесь только одно поле. В проекте код в 2 раза длиннее)
3.14159265 17.10.2014 15:01 # +2
А то я и думаю что за диалект мелкософтовский. Прям как бейсиком запахло. Такой стойкий, щёкочущий нос аромат.
Только хочу напомнить любителям IIFа, что в отличии от тернарника обе его вореции - истинная и фальшивая вычисляются сразу
iif(isnull((SELECT H_ALL FROM S_KODGR WHERE GR.D1 = S_KODGR.K_KOD)),0,(SELECT H_ALL FROM S_KODGR WHERE GR.D1 = S_KODGR.K_KOD)) +
То есть каждый iif вычислит по джва запроса.
Но полагаю в таком УГ как access такая просадка пирфоманса некритична.
guest 18.10.2014 11:47 # −2
3.14159265 17.10.2014 15:07 # 0
Зачем IIF?
SELECT isnull(H_ALL FROM,0) S_KODGR WHERE GR.D31 = S_KODGR.K_KOD
Не?
yrHeTaTeJlb 27.10.2014 09:18 # −1
defecate-plusplus 17.10.2014 16:41 # 0
аксесс май эсс
кроме переделывания рахитектуры может помочь pivot, если он есть в средствах бд
ну и затем, учитывая, что тут тупо сраная сумма считается, s_kodgr.k_kod, sum(h_all) .. group by s_kodgr.k_kod позволит не делать эти несчастные decode iif
если нужны суммы даже для тех, где ничего нет - лефт джойн во внешнем запросе
yrHeTaTeJlb 27.10.2014 09:36 # −1
defecate-plusplus 27.10.2014 09:43 # −1
вместо 186 подзапросов можно обойтись одним джойном и божественным ифом
хоть case when x = 1 then column1 when x = 2 then column2 ... when x = 31 then column31 end
уж это эссэсс умеет?
bormand 27.10.2014 10:24 # −1
Dummy00001 17.10.2014 17:35 # 0
очевидно очепятка. поле хотели назвать `HELL`.
3.14159265 17.10.2014 17:49 # 0
Dummy00001 17.10.2014 17:56 # 0
> > И 31 подзапрос превращается в 62
> > 62 подзапроса превращаются в 124
геометрическая прогрессия, до 9000 еще ковылять и ковылять. времени предостаточно для еще огого сколько энтерпрайз принсипал архитектов карьеру сделать.
3.14159265 17.10.2014 18:15 # −1
Dummy00001 17.10.2014 18:31 # 0
PS тут еще только HAL-124. и ковылять им до 9000...
guest 17.10.2014 20:21 # −3
Qwertiy 17.10.2014 22:36 # −1
guest 18.10.2014 11:47 # −2
Lokich 20.10.2014 11:43 # −1
defecate-plusplus 20.10.2014 12:02 # +2
в консерватории надо что-то исправить
bormand 20.10.2014 12:30 # 0
Табличку с 70 колонками, которую этим запросом unpivot'или...
defecate-plusplus 20.10.2014 12:47 # +2
где generated_sequence_1_70 - это мы даже в майскл недавно видели, а choose_by_pos_func - адский пиздец, начиная от decode(seq70.value, 1, t.c1, 2, t.c2, 3, t.c3 ...) и его аналогов (в т.ч. самописных), заканчивая склейкой значений t.c1..t.c70 в какой-нибудь xml/тупо строку для бедных, и поиск n-th значения через возможные средства xml/регексп/субстр
в постгресе, небось, колонки вообще можно собрать в массив и вообще вытаскивать из него ячейку по индексу (тут уж борманд расскажет)
но для начала, надо найти того, кто придумал эти c1..c70, и отпилить ему ручонки ржавым тупым ножом
bormand 20.10.2014 12:58 # −1
Ну вот так можно, к примеру: http://sqlfiddle.com/#!15/8c954/2
anonimb84a2f6fd141 20.10.2014 21:09 # −6
http://govnokod.ru/16897#comment251918
Уебан, ты хоть знаешь, что через каких-то несколько лет всех сионистов стрелять будут, как бешеных собак?
bormand 21.10.2014 05:25 # 0
guest 27.10.2014 21:26 # −2
roskomgovno 14.06.2018 00:49 # 0
Я думал у MS только кубы, excel и SQL умеюит
bormand 14.06.2018 08:15 # 0
roskomgovno 14.06.2018 17:38 # 0
Когда у тебя 70 колонок?
defecate-plusplus 14.06.2018 10:11 # +1
https://stackoverflow.com/questions/16691853/transform-and-pivot-in-access-2013-sql
3.14159265 14.06.2018 14:10 # 0
roskomgovno 14.06.2018 17:40 # 0
Правда и на счет postgresql я не уверен:)
Вот ms-sql умеет очень давно, и excel тоже
defecate-plusplus 14.06.2018 19:07 # 0
https://www.postgresql.org/docs/10/static/tablefunc.html
прост не стали выносить как очередное расширение синтаксиса sql, а сделали как функцию
roskomgovno 14.06.2018 19:08 # 0
хе-хе, psql еще умеет так:
\crosstabview [ colV [ colH [ colD [ sortcolH ] ] ] ]
Executes the current query buffer (like \g) and shows the results in a crosstab grid.
defecate-plusplus 14.06.2018 19:12 # +1
неоднозначная тема в целом, оч вербозная
roskomgovno 14.06.2018 19:15 # 0
anonimb84a2f6fd141 20.10.2014 21:09 # −2
Lure Of Chaos 21.10.2014 14:32 # −1
yrHeTaTeJlb 27.10.2014 09:38 # −1
Lure Of Chaos 27.10.2014 11:25 # −2
yrHeTaTeJlb 06.11.2014 10:38 # 0
guest 27.10.2014 21:32 # −3
guest 14.11.2014 18:50 # 0
в Access-e есть и NZ в запросах прекрасно работает. И ведь не лень всю эту хуету было писать, погуглить видимо не судьба.
yrHeTaTeJlb 27.11.2014 14:58 # 0
dmli 26.02.2015 22:45 # 0