|
Как объединить 3 запроса в 1. ОЧЕНЬ большой
|
|||
---|---|---|---|
#18+
Помогите пожалуйста собрать все в 1 запрос. 1-й запрос (он очень большой. Чтобы его открыть нужно открыть БД, создать новый запрос и скопировать текст запроса в SQL) Создание этого запроса обсуждалось в этой теме: http://www.sql.ru/forum/1214423/kak-vyvesti-pustye-polya-esli-est-uslovie SELECT name_gr AS Группа,АктыАТИ, АктыГЖИ, АктыГСН, Уведомления, Извещения, Предписания, Протоколы FROM GRUPPA INNER JOIN [SELECT cod_gr, Sum(C*(V=1)*(D BETWEEN #07/01/2016# AND #07/10/2016#)) AS АктыАТИ, Sum(C*(V=2)*(D BETWEEN #07/01/2016# AND #07/10/2016#)) AS АктыГЖИ, Sum(C*(V=3)*(D BETWEEN #07/01/2016# AND #07/10/2016#)) AS АктыГСН, Sum(C*(V=4)*(D BETWEEN #07/01/2016# AND #07/10/2016#)) AS Уведомления, Sum(C*(V=5)*(D BETWEEN #07/01/2016# AND #07/10/2016#)) AS Извещения, Sum(C*(V=6)*(D BETWEEN #07/01/2016# AND #07/10/2016#)) AS Предписания, Sum(C*(V=7)*(D BETWEEN #07/01/2016# AND #07/10/2016#)) AS Протоколы FROM(SELECT V, cod_gr, C, D FROM TEMA LEFT JOIN (SELECT 1 AS V, AKT.cod_tem AS T, AKT.col_akt AS C, AKT.data_akt AS D FROM AKT WHERE AKT.Cod_cakt = 1 UNION ALL SELECT 2, AKT.cod_tem, AKT.col_akt , AKT.data_akt FROM AKT WHERE AKT.Cod_cakt = 2 UNION ALL SELECT 3 , AKT.cod_tem , AKT.col_akt , AKT.data_akt FROM AKT WHERE AKT.Cod_cakt =3 UNION ALL SELECT 4, UVED.cod_tem, UVED.col_uved, UVED.data_uved FROM UVED UNION ALL SELECT 5, IZV.cod_tem, IZV.col_izv, IZV.data_izv FROM IZV UNION ALL SELECT 6, PRED.cod_tem, PRED.col_pred, PRED.data_pred FROM PRED UNION ALL SELECT 7, PROT.cod_tem, PROT.col_prot, PROT.data_prot FROM PROT) AS Q ON TEMA.cod_tem=Q.T) AS QQ GROUP BY cod_gr]. AS QQQ ON GRUPPA.cod_gr=QQQ.cod_gr; 2-й запрос SELECT GRUPPA.cod_gr, GRUPPA.name_gr, -Sum(RABOTA.Obsl_rab*(RABOTA.Data_rab Between #7/1/2016# And #7/10/2016#)) AS Обследовано, -Sum(RABOTA.V_rab*(RABOTA.Data_rab Between #7/1/2016# And #7/10/2016#)) AS выявлено, -Sum(RABOTA.Ustr_rab*(RABOTA.Data_rab Between #7/1/2016# And #7/10/2016#)) AS устранено, -Sum(RABOTA.Str_rab*(RABOTA.Data_rab Between #7/1/2016# And #7/10/2016#)) AS СтрПлощ, -Sum(RABOTA.Post_rab*(RABOTA.Data_rab Between #7/1/2016# And #7/10/2016#)) AS ПоступилоОбр, -Sum(RABOTA.Ras_rab*(RABOTA.Data_rab Between #7/1/2016# And #7/10/2016#)) AS Рассмотрено, -Sum(RABOTA.Reid_rab*(RABOTA.Data_rab Between #7/1/2016# And #7/10/2016#)) AS рейдов FROM GRUPPA LEFT JOIN RABOTA ON GRUPPA.cod_gr = RABOTA.Cod_gr GROUP BY GRUPPA.cod_gr, GRUPPA.name_gr; 3-й запрос SELECT GRUPPA.cod_gr, GRUPPA.name_gr, -Sum(ORDERS.Sogl_ord*(ORDERS.Data_ord BETWEEN #07/01/2016# AND #07/10/2016#)) AS [Sum-Sogl_ord], -Sum(ORDERS.Gar_ord*(ORDERS.Data_ord BETWEEN #07/01/2016# AND #07/10/2016#)) AS [Sum-Gar_ord], -Sum(ORDERS.Zak_ord*(ORDERS.Data_ord BETWEEN #07/01/2016# AND #07/10/2016#)) AS [Sum-Zak_ord], -Sum(ORDERS.Post_ord*(ORDERS.Data_ord BETWEEN #07/01/2016# AND #07/10/2016#)) AS [Sum-Post_ord] FROM (GRUPPA LEFT JOIN SPEC ON GRUPPA.cod_gr = SPEC.Cod_gr) LEFT JOIN ORDERS ON SPEC.Cod_spec = ORDERS.Cod_spec GROUP BY GRUPPA.cod_gr, GRUPPA.name_gr; ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2016, 08:57 |
|
Как объединить 3 запроса в 1. ОЧЕНЬ большой
|
|||
---|---|---|---|
#18+
DQuasar, Так выглядят результаты запросов сейчас. Нужно что бы они выводились одним запросом ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2016, 08:59 |
|
Как объединить 3 запроса в 1. ОЧЕНЬ большой
|
|||
---|---|---|---|
#18+
DQuasarDQuasar, Так выглядят результаты запросов сейчас. Нужно что бы они выводились одним запросом приложил не тот скрин. 3-я таблица (маленькая) не считается. Суть вопроса остается тем же. Спасибо... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2016, 09:01 |
|
Как объединить 3 запроса в 1. ОЧЕНЬ большой
|
|||
---|---|---|---|
#18+
Во-первых, первый запрос совсем не большой. И что Вам помешало скопировать текст и создать его заново, как рекомендуете? Добавьте в список вывода первого запроса поле GRUPPA.cod_gr, затем свяжите JOIN'ами по cod_gr все три запроса. Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2016, 11:19 |
|
Как объединить 3 запроса в 1. ОЧЕНЬ большой
|
|||
---|---|---|---|
#18+
__Michelle, Спасибо большое за шаблон. Помогло. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2016, 14:22 |
|
Как объединить 3 запроса в 1. ОЧЕНЬ большой
|
|||
---|---|---|---|
#18+
DQuasar, Это не шаблон. Это решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2016, 14:26 |
|
Как объединить 3 запроса в 1. ОЧЕНЬ большой
|
|||
---|---|---|---|
#18+
__Michelle, Скажите пожалуйста, в первом запросе sum выводит значения без минуса, а во втором с минусом. Для того чтобы это исправить перед sum мне пришлось ставить минус. Почему так? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2016, 14:27 |
|
Как объединить 3 запроса в 1. ОЧЕНЬ большой
|
|||
---|---|---|---|
#18+
DQuasar__Michelle, Скажите пожалуйста, в первом запросе sum выводит значения без минуса, а во втором с минусом. Для того чтобы это исправить перед sum мне пришлось ставить минус. Почему так?Не исправить, а компенсировать -1. В первом запросе (-1)*(-1) дает плюс. Но, думаю, Вы все равно не скоро поймете, раз спрашиваете. Да и эта Ваша тема говорит о том же SUM с условием . ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2016, 14:34 |
|
Как объединить 3 запроса в 1. ОЧЕНЬ большой
|
|||
---|---|---|---|
#18+
__Michelle, Да я не профи в этом деле... Но, во всяком случае, стараюсь разобраться. Спасибо Вам за разъяснения ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2016, 15:59 |
|
Как объединить 3 запроса в 1. ОЧЕНЬ большой
|
|||
---|---|---|---|
#18+
DQuasar, Ну вот, смотрите. Возьмем выражение из первого запроса Код: sql 1.
Это сумма произведений (знак * это знак умножения). Что является сомножителями? а) C - это число >=0; б) результат выполнения логической операции "равно ли V единице?" (V=1) - может принимать значение False (0) или True (-1); в) результат выполнения логической операции "попадает ли дата D в заданный интервал?" (D BETWEEN #07/01/2016# AND #07/10/2016#) - может принимать значение False (0) или True (-1). Если б) или в) равно 0, то и произведение равно 0. Если же и б) и в) равны -1, то имеем C*(-1)*(-1), что всегда даст положительный результат при ненулевом C. Так понятнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.07.2016, 16:47 |
|
|
start [/forum/topic.php?fid=45&msg=39271435&tid=1613380]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 327ms |
total: | 471ms |
0 / 0 |