|
|
|
Подскажите решение (запрос из 2х связанных таблиц)
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Есть 2 связанные таблицы MAIN: ID,SUMMA,OBL,M_STATUS RES: ID,MAIN_ID,SUMMA,OBL,STATUS где внешний ключ RES.MAIN_ID=MAIN.ID M_STATUS,STATUS=1,2,3... OBL=1,2,3... ID - первичный ключ надо: сгруппировав по признаку OBL, получить следующее: OBL CNT0 SUM0 CNT01 SUM01 CNT02 SUM02 CNT11 SUM11 CNT12 SUM12 где CNT0 и SUM0 - count(MAIN.ID) и sum(MAIN.SUMMA) для всех M_STATUS CNT01 и SUM01 - count(MAIN.ID) и sum(MAIN.SUMMA) для M_STATUS=1 CNT02 и SUM02 - count(MAIN.ID) и sum(MAIN.SUMMA) для M_STATUS=2 ... CNT11 и SUM11 - count(RES.ID) и sum(RES.SUMMA) для STATUS=1 (M_STATUS - любой) CNT12 и SUM12 - count(RES.ID) и sum(RES.SUMMA) для STATUS=2 (M_STATUS - любой) спасибо за внимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2004, 14:11:59 |
|
||
|
Подскажите решение (запрос из 2х связанных таблиц)
|
|||
|---|---|---|---|
|
#18+
Это общая схема для развёртки в горизонт Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2004, 17:37:57 |
|
||
|
Подскажите решение (запрос из 2х связанных таблиц)
|
|||
|---|---|---|---|
|
#18+
спасибо большое, про такую возможность даже не знал, выходя из положения другими средствами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2004, 18:19:32 |
|
||
|
Подскажите решение (запрос из 2х связанных таблиц)
|
|||
|---|---|---|---|
|
#18+
Подскажите пожалуйста, хотяб схематично, вариант с ХП, так как с трудом представляю подобный вариант на ХП Спасибо за внимание ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2004, 18:24:45 |
|
||
|
Подскажите решение (запрос из 2х связанных таблиц)
|
|||
|---|---|---|---|
|
#18+
проверил только что - схема с подзапросами не подходит, так как очень уж тяжёлая выборка получается (результатов небольшой выборки я не дождался). Таблица MAIN - примерно 100 000 строк, RES - ещё больше, подзапросов получается (по такой схеме) около 12 (!!!), а строк в результате прогнозируется около 30 000. В данный момент это всё реализовано связанными запросами на клиентской стороне, и выполнялось около 3х часов. Но пришлось в одном из подзапросов прилепить вместо таблицы выборку из VIEW-а, скорость упала раз в 10, поэтому и возник вопрос. PS. В большинстве подзапросов пары CNTxx, SUMxx получаются одним запросом. Спасибо за внимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2004, 18:54:16 |
|
||
|
Подскажите решение (запрос из 2х связанных таблиц)
|
|||
|---|---|---|---|
|
#18+
На базе такого небольшого размера запрос не может идти 3 часа, если правильно используются индексы + план запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.05.2004, 12:37:16 |
|
||
|
Подскажите решение (запрос из 2х связанных таблиц)
|
|||
|---|---|---|---|
|
#18+
Я бы попробовал: SELECT COUNT(*) AS CNT0, SUM(MAIN.SUMMA) AS SUM0, COUNT( CASE M_STATUS WHEN 1 THEN 1 ELSE 0 END ) AS CNT01, COUNT( CASE M_STATUS WHEN 1 THEN MAIN.SUMMA ELSE 0 END ) AS SUM01 и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.05.2004, 11:20:01 |
|
||
|
Подскажите решение (запрос из 2х связанных таблиц)
|
|||
|---|---|---|---|
|
#18+
>Valery Shiskin Большое спасибо за варианты решения. Я сделал всё "в лоб" на клиентской части, но привёдённое вами решение очень интересно, и, возможно, будет более эффективным ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2004, 17:58:58 |
|
||
|
Подскажите решение (запрос из 2х связанных таблиц)
|
|||
|---|---|---|---|
|
#18+
>Valery Shiskin уточните пожалуйста, с какой версии Firebird появилось CASE у меня на 1.0 его к сожалению нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 11:06:09 |
|
||
|
Подскажите решение (запрос из 2х связанных таблиц)
|
|||
|---|---|---|---|
|
#18+
Можно обоитись без CASE, используя UDF. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 11:50:42 |
|
||
|
Подскажите решение (запрос из 2х связанных таблиц)
|
|||
|---|---|---|---|
|
#18+
Вариант с CASE или IIF подходит только для части запроса, поэтому попробовал сделать через хранимую процедуру то, что раньше на клиенте в лоб делалось (5 подзапросов на каждую запись запроса), так скорость получилась раз в 15-20 выше :) спасибо всем ответившим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 12:38:00 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32515164&tid=1578428]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
171ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
2ms |
| others: | 211ms |
| total: | 505ms |

| 0 / 0 |
