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

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

Добавьте в список вывода первого запроса поле 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
Как объединить 3 запроса в 1. ОЧЕНЬ большой
    #39271343
DQuasar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
__Michelle,
Спасибо большое за шаблон. Помогло.
...
Рейтинг: 0 / 0
Как объединить 3 запроса в 1. ОЧЕНЬ большой
    #39271345
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DQuasar,

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

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


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