Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как объединить 3 запроса в 1. ОЧЕНЬ большой / 11 сообщений из 11, страница 1 из 1
10.07.2016, 08:57
    #39271264
DQuasar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить 3 запроса в 1. ОЧЕНЬ большой
Помогите пожалуйста собрать все в 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;
...
Рейтинг: 0 / 0
10.07.2016, 08:59
    #39271265
DQuasar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить 3 запроса в 1. ОЧЕНЬ большой
DQuasar,
Так выглядят результаты запросов сейчас. Нужно что бы они выводились одним запросом
...
Рейтинг: 0 / 0
10.07.2016, 09:01
    #39271267
DQuasar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить 3 запроса в 1. ОЧЕНЬ большой
DQuasarDQuasar,
Так выглядят результаты запросов сейчас. Нужно что бы они выводились одним запросом

приложил не тот скрин. 3-я таблица (маленькая) не считается. Суть вопроса остается тем же. Спасибо...
...
Рейтинг: 0 / 0
10.07.2016, 11:19
    #39271296
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить 3 запроса в 1. ОЧЕНЬ большой
Во-первых, первый запрос совсем не большой.
И что Вам помешало скопировать текст и создать его заново, как рекомендуете?

Добавьте в список вывода первого запроса поле GRUPPA.cod_gr,
затем свяжите JOIN'ами по cod_gr все три запроса.
Код: sql
1.
2.
3.
4.
SELECT * FROM 
(Запрос1 INNER JOIN Запрос2 ON Запрос1.cod_gr = Запрос2.cod_gr) 
INNER JOIN 
Запрос3 ON Запрос1.cod_gr = Запрос3.cod_gr;
...
Рейтинг: 0 / 0
10.07.2016, 14:22
    #39271343
DQuasar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить 3 запроса в 1. ОЧЕНЬ большой
__Michelle,
Спасибо большое за шаблон. Помогло.
...
Рейтинг: 0 / 0
10.07.2016, 14:26
    #39271345
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить 3 запроса в 1. ОЧЕНЬ большой
DQuasar,

Это не шаблон. Это решение.
...
Рейтинг: 0 / 0
10.07.2016, 14:27
    #39271347
DQuasar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить 3 запроса в 1. ОЧЕНЬ большой
__Michelle, Скажите пожалуйста, в первом запросе sum выводит значения без минуса, а во втором с минусом. Для того чтобы это исправить перед sum мне пришлось ставить минус. Почему так?
...
Рейтинг: 0 / 0
10.07.2016, 14:34
    #39271350
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить 3 запроса в 1. ОЧЕНЬ большой
DQuasar__Michelle, Скажите пожалуйста, в первом запросе sum выводит значения без минуса, а во втором с минусом. Для того чтобы это исправить перед sum мне пришлось ставить минус. Почему так?Не исправить, а компенсировать -1.
В первом запросе (-1)*(-1) дает плюс.
Но, думаю, Вы все равно не скоро поймете, раз спрашиваете.
Да и эта Ваша тема говорит о том же SUM с условием .
...
Рейтинг: 0 / 0
10.07.2016, 15:59
    #39271379
DQuasar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить 3 запроса в 1. ОЧЕНЬ большой
__Michelle,

Да я не профи в этом деле... Но, во всяком случае, стараюсь разобраться. Спасибо Вам за разъяснения
...
Рейтинг: 0 / 0
10.07.2016, 16:47
    #39271405
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить 3 запроса в 1. ОЧЕНЬ большой
DQuasar,

Ну вот, смотрите.
Возьмем выражение из первого запроса
Код: sql
1.
Sum(C*(V=1)*(D BETWEEN #07/01/2016# AND #07/10/2016#))

Это сумма произведений (знак * это знак умножения).
Что является сомножителями?
а) 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.

Так понятнее?
...
Рейтинг: 0 / 0
10.07.2016, 17:54
    #39271435
DQuasar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как объединить 3 запроса в 1. ОЧЕНЬ большой
__Michelle,
ДА)))
Я разобрался спасибо.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как объединить 3 запроса в 1. ОЧЕНЬ большой / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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