powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Union all не может объеденить запросы
12 сообщений из 12, страница 1 из 1
Union all не может объеденить запросы
    #39646624
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток, ребят
Очень нужна ваша помощь. Имеется вроде бы простая проблема, но она поставила меня в ступор.

Есть четыре запроса, которые по отдельности успешно каждый отрабатывают, поля у них все с одинаковыми именами и в одинаковом порядке расположены, но union all при их объединении выдает ошибку: "Ссылка на поле 'dbo_TempTovar6.Number' может относиться к полям нескольких таблиц, перечисленных в предложении FROM инструкции SQL".

При чем проблема появилась после того как переписал первый запрос, остальные три между собой стыкуются замечательно, а первый не стыкуется ни со всеми тремя ни с каким-либо другим по отдельности. То есть очевидно, что проблема в нем, но не могу никак понять где и что именно нужно исправить.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SELECT dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID, "МО" AS Показатель, IIf([ShopCount]>0,[ShopCount],0) AS Данные
FROM (dbo_Товары INNER JOIN dbo_TempTovar6 ON dbo_Товары.Код = dbo_TempTovar6.TovarKod) LEFT JOIN Act_MO_Before ON (dbo_TempTovar6.DateMe = Act_MO_Before.DateMe) AND (dbo_TempTovar6.TovarKod = Act_MO_Before.TovarKod) AND (dbo_TempTovar6.Number = Act_MO_Before.Номер)
GROUP BY dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID, "МО", IIf([ShopCount]>0,[ShopCount],0)
ORDER BY dbo_TempTovar6.Number, dbo_TempTovar6.ID


UNION ALL

SELECT dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID, "P" AS Показатель, IIf(Sum([Summ])>0,Round(Sum([Summ])/Sum([Sale]),2),0) AS Данные
FROM dbo_Источники_магазинов_РЦ INNER JOIN (dbo_Товары INNER JOIN ((dbo_TempTovar6 INNER JOIN dbo_SalesALL ON (dbo_TempTovar6.DateMe = dbo_SalesALL.Date) AND (dbo_TempTovar6.TovarKod = dbo_SalesALL.TovarKod)) INNER JOIN FilterRC ON dbo_TempTovar6.Place = FilterRC.Place) ON dbo_Товары.Код = dbo_SalesALL.TovarKod) ON (dbo_Источники_магазинов_РЦ.Магазин = dbo_SalesALL.ShopKod) AND (dbo_Источники_магазинов_РЦ.Источник_поставки_РЦ = FilterRC.РЦ)
GROUP BY dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID
ORDER BY dbo_TempTovar6.Number, dbo_TempTovar6.ID


UNION ALL 

SELECT dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID, "SU" AS Показатель, Sum(dbo_SalesALL.Sale) AS Данные
FROM dbo_Источники_магазинов_РЦ INNER JOIN (dbo_Товары INNER JOIN ((dbo_TempTovar6 INNER JOIN dbo_SalesALL ON (dbo_TempTovar6.TovarKod = dbo_SalesALL.TovarKod) AND (dbo_TempTovar6.DateMe = dbo_SalesALL.Date)) INNER JOIN FilterRC ON dbo_TempTovar6.Place = FilterRC.Place) ON dbo_Товары.Код = dbo_SalesALL.TovarKod) ON (dbo_Источники_магазинов_РЦ.Магазин = dbo_SalesALL.ShopKod) AND (dbo_Источники_магазинов_РЦ.Источник_поставки_РЦ = FilterRC.РЦ)
GROUP BY dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID
HAVING (((Sum(dbo_SalesALL.Sale))>=0))
ORDER BY dbo_TempTovar6.Number, dbo_TempTovar6.ID


UNION ALL SELECT dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID, "C" AS Показатель, Nz(Count([dbo_SalesALL].[ShopKod]),0) AS Данные
FROM dbo_Источники_магазинов_РЦ INNER JOIN (dbo_Товары INNER JOIN ((dbo_TempTovar6 INNER JOIN dbo_SalesALL ON (dbo_TempTovar6.TovarKod = dbo_SalesALL.TovarKod) AND (dbo_TempTovar6.DateMe = dbo_SalesALL.Date)) INNER JOIN FilterRC ON dbo_TempTovar6.Place = FilterRC.Place) ON dbo_Товары.Код = dbo_SalesALL.TovarKod) ON (dbo_Источники_магазинов_РЦ.Источник_поставки_РЦ = FilterRC.РЦ) AND (dbo_Источники_магазинов_РЦ.Магазин = dbo_SalesALL.ShopKod)
GROUP BY dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID
ORDER BY dbo_TempTovar6.Number, dbo_TempTovar6.ID;




Ниже промежуточный запрос, на который ссылается тот самый запрос, из-за которого предположительно не работает Union
Код: sql
1.
2.
3.
4.
5.
SELECT dbo_TempTovar6.Number AS Номер, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, Count(dbo_BI_Small_Rest.Shop_Number) AS ShopCount
FROM ((dbo_TempTovar6 INNER JOIN dbo_BI_Small_Rest ON (dbo_TempTovar6.DateMe = dbo_BI_Small_Rest.Day_Date) AND (dbo_TempTovar6.TovarKod = dbo_BI_Small_Rest.Product_Id)) INNER JOIN FilterRC ON dbo_TempTovar6.Place = FilterRC.Place) INNER JOIN dbo_Источники_магазинов_РЦ ON (FilterRC.РЦ = dbo_Источники_магазинов_РЦ.Источник_поставки_РЦ) AND (dbo_BI_Small_Rest.Shop_Number = dbo_Источники_магазинов_РЦ.Магазин)
WHERE (((dbo_BI_Small_Rest.Resp_Unit) Not Like "*Допродажа*"))
GROUP BY dbo_TempTovar6.Number, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe
ORDER BY dbo_TempTovar6.Number;



Заранее большое спасибо за помощь
...
Рейтинг: 0 / 0
Union all не может объеденить запросы
    #39646642
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ненавидите алиасы? а зря...
...
Рейтинг: 0 / 0
Union all не может объеденить запросы
    #39646661
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleX_X89,

Запрос и СПЕЦИФИКАЦИЯ
АтрибутМаксимальное значениеКоличество установленных связей32 на одну таблицу за вычетом количества индексов этой таблицы, созданных для полей или сочетаний полей, которые не участвуют в связях *Количество таблиц в запросе32 *Количество соединений в запросеЯ насчитала 1616 *Количество полей в наборе записей255Размер набора записей1 ГБОграничение сортировки255 символов в одном или нескольких поляхКоличество уровней вложенности запросов50 *Количество символов в ячейке в бланке запроса1024Количество символов для параметра в запросе с параметрами255Количество операторов AND в предложении WHERE или HAVING99 *Количество символов в инструкции SQLПриблизительно 64 000 *
* Максимальные значения могут быть меньше , если запрос содержит многозначные поля подстановки (только для ACCDB-файлов).
.
...
Рейтинг: 0 / 0
Union all не может объеденить запросы
    #39646664
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AleX_X89,

причем не считала union --только join
...
Рейтинг: 0 / 0
Union all не может объеденить запросы
    #39646709
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Такой вариант юинона работает. Это тот что был раньше, до того как переделал первый запрос из этих четырех

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
SELECT dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID, "МО" AS Показатель, Count(dbo_BI_Small_Rest.Shop_Number) AS Данные
FROM (((dbo_TempTovar6 INNER JOIN dbo_Товары ON dbo_TempTovar6.TovarKod = dbo_Товары.Код) INNER JOIN dbo_BI_Small_Rest ON (dbo_TempTovar6.DateMe = dbo_BI_Small_Rest.Day_Date) AND (dbo_TempTovar6.TovarKod = dbo_BI_Small_Rest.Product_Id)) INNER JOIN FilterRC ON dbo_TempTovar6.Place = FilterRC.Place) INNER JOIN dbo_Источники_магазинов_РЦ ON (FilterRC.РЦ = dbo_Источники_магазинов_РЦ.Источник_поставки_РЦ) AND (dbo_BI_Small_Rest.Shop_Number = dbo_Источники_магазинов_РЦ.Магазин)
WHERE (((dbo_BI_Small_Rest.Resp_Unit) Not Like "*Допродажа*"))
GROUP BY dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID
ORDER BY dbo_TempTovar6.Number, dbo_TempTovar6.ID



UNION ALL

SELECT dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID, "P" AS Показатель, IIf(Sum([Summ])>0,Round(Sum([Summ])/Sum([Sale]),2),0) AS Данные
FROM dbo_Источники_магазинов_РЦ INNER JOIN (dbo_Товары INNER JOIN ((dbo_TempTovar6 INNER JOIN dbo_SalesALL ON (dbo_TempTovar6.DateMe = dbo_SalesALL.Date) AND (dbo_TempTovar6.TovarKod = dbo_SalesALL.TovarKod)) INNER JOIN FilterRC ON dbo_TempTovar6.Place = FilterRC.Place) ON dbo_Товары.Код = dbo_SalesALL.TovarKod) ON (dbo_Источники_магазинов_РЦ.Магазин = dbo_SalesALL.ShopKod) AND (dbo_Источники_магазинов_РЦ.Источник_поставки_РЦ = FilterRC.РЦ)
GROUP BY dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID
ORDER BY dbo_TempTovar6.Number, dbo_TempTovar6.ID


UNION ALL 

SELECT dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID, "SU" AS Показатель, Sum(dbo_SalesALL.Sale) AS Данные
FROM dbo_Источники_магазинов_РЦ INNER JOIN (dbo_Товары INNER JOIN ((dbo_TempTovar6 INNER JOIN dbo_SalesALL ON (dbo_TempTovar6.TovarKod = dbo_SalesALL.TovarKod) AND (dbo_TempTovar6.DateMe = dbo_SalesALL.Date)) INNER JOIN FilterRC ON dbo_TempTovar6.Place = FilterRC.Place) ON dbo_Товары.Код = dbo_SalesALL.TovarKod) ON (dbo_Источники_магазинов_РЦ.Магазин = dbo_SalesALL.ShopKod) AND (dbo_Источники_магазинов_РЦ.Источник_поставки_РЦ = FilterRC.РЦ)
GROUP BY dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID
HAVING (((Sum(dbo_SalesALL.Sale))>=0))
ORDER BY dbo_TempTovar6.Number, dbo_TempTovar6.ID


UNION ALL SELECT dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID, "C" AS Показатель, Nz(Count([dbo_SalesALL].[ShopKod]),0) AS Данные
FROM dbo_Источники_магазинов_РЦ INNER JOIN (dbo_Товары INNER JOIN ((dbo_TempTovar6 INNER JOIN dbo_SalesALL ON (dbo_TempTovar6.TovarKod = dbo_SalesALL.TovarKod) AND (dbo_TempTovar6.DateMe = dbo_SalesALL.Date)) INNER JOIN FilterRC ON dbo_TempTovar6.Place = FilterRC.Place) ON dbo_Товары.Код = dbo_SalesALL.TovarKod) ON (dbo_Источники_магазинов_РЦ.Источник_поставки_РЦ = FilterRC.РЦ) AND (dbo_Источники_магазинов_РЦ.Магазин = dbo_SalesALL.ShopKod)
GROUP BY dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID
ORDER BY dbo_TempTovar6.Number, dbo_TempTovar6.ID;

...
Рейтинг: 0 / 0
Union all не может объеденить запросы
    #39646740
Попробуйте в последней секции Union запроса вместо:
ORDER BY dbo_TempTovar6.Number, dbo_TempTovar6.ID
указать
ORDER BY Number, ID
...
Рейтинг: 0 / 0
Union all не может объеденить запросы
    #39646747
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да сортировка подзапросов в UNION - вообще затея, лишённая смысла. Разумнее ORDER BY из них вообще удалить.
...
Рейтинг: 0 / 0
Union all не может объеденить запросы
    #39646764
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не совсем понял, что хотела сказать Пенсионерка
...
Рейтинг: 0 / 0
Union all не может объеденить запросы
    #39646783
AleX_X89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема как оказалось завязана на сортировке, удалил все строки с "order by" и заработало. Возможно это из-за наличия односторонних связей в первом запросе

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
SELECT t2.Number, t1.Наименование, t2.TovarKod, t2.DateMe, t2.ID, "МО" AS Показатель, IIf([ShopCount]>0,[ShopCount],0) AS Данные
FROM (dbo_Товары as t1 INNER JOIN dbo_TempTovar6  as t2 ON t1.Код = t2.TovarKod) LEFT JOIN Act_MO_Before ON (t2.DateMe = Act_MO_Before.DateMe) AND (t2.TovarKod = Act_MO_Before.TovarKod) AND (t2.Number = Act_MO_Before.Номер)
GROUP BY t2.Number, t1.Наименование, t2.TovarKod, t2.DateMe, t2.ID, "МО", IIf([ShopCount]>0,[ShopCount],0)



UNION ALL

SELECT dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID, "P" AS Показатель, IIf(Sum([Summ])>0,Round(Sum([Summ])/Sum([Sale]),2),0) AS Данные
FROM dbo_Источники_магазинов_РЦ INNER JOIN (dbo_Товары INNER JOIN ((dbo_TempTovar6 INNER JOIN dbo_SalesALL ON (dbo_TempTovar6.DateMe = dbo_SalesALL.Date) AND (dbo_TempTovar6.TovarKod = dbo_SalesALL.TovarKod)) INNER JOIN FilterRC ON dbo_TempTovar6.Place = FilterRC.Place) ON dbo_Товары.Код = dbo_SalesALL.TovarKod) ON (dbo_Источники_магазинов_РЦ.Магазин = dbo_SalesALL.ShopKod) AND (dbo_Источники_магазинов_РЦ.Источник_поставки_РЦ = FilterRC.РЦ)
GROUP BY dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID



UNION ALL 

SELECT dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID, "SU" AS Показатель, Sum(dbo_SalesALL.Sale) AS Данные
FROM dbo_Источники_магазинов_РЦ INNER JOIN (dbo_Товары INNER JOIN ((dbo_TempTovar6 INNER JOIN dbo_SalesALL ON (dbo_TempTovar6.TovarKod = dbo_SalesALL.TovarKod) AND (dbo_TempTovar6.DateMe = dbo_SalesALL.Date)) INNER JOIN FilterRC ON dbo_TempTovar6.Place = FilterRC.Place) ON dbo_Товары.Код = dbo_SalesALL.TovarKod) ON (dbo_Источники_магазинов_РЦ.Магазин = dbo_SalesALL.ShopKod) AND (dbo_Источники_магазинов_РЦ.Источник_поставки_РЦ = FilterRC.РЦ)
GROUP BY dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID
HAVING (((Sum(dbo_SalesALL.Sale))>=0))



UNION ALL SELECT dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID, "C" AS Показатель, Nz(Count([dbo_SalesALL].[ShopKod]),0) AS Данные
FROM dbo_Источники_магазинов_РЦ INNER JOIN (dbo_Товары INNER JOIN ((dbo_TempTovar6 INNER JOIN dbo_SalesALL ON (dbo_TempTovar6.TovarKod = dbo_SalesALL.TovarKod) AND (dbo_TempTovar6.DateMe = dbo_SalesALL.Date)) INNER JOIN FilterRC ON dbo_TempTovar6.Place = FilterRC.Place) ON dbo_Товары.Код = dbo_SalesALL.TovarKod) ON (dbo_Источники_магазинов_РЦ.Источник_поставки_РЦ = FilterRC.РЦ) AND (dbo_Источники_магазинов_РЦ.Магазин = dbo_SalesALL.ShopKod)
GROUP BY dbo_TempTovar6.Number, dbo_Товары.Наименование, dbo_TempTovar6.TovarKod, dbo_TempTovar6.DateMe, dbo_TempTovar6.ID;



В первом запросе добавил элиасы, но работает и без элиасов, если просто убрать сортировку.

Всем спасибо
...
Рейтинг: 0 / 0
Union all не может объеденить запросы
    #39646801
AleX_X89Проблема как оказалось завязана на сортировке, удалил все строки с "order by" и заработало. А теперь попробуйте добавить в последней секции:
ORDER BY Number, ID
...
Рейтинг: 0 / 0
Union all не может объеденить запросы
    #39646831
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолийтеперь попробуйте добавить в последней секции:
ORDER BY Number, IDЛучше ORDER BY 1,5
...
Рейтинг: 0 / 0
Union all не может объеденить запросы
    #39646860
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему запрос на объединение нельзя использовать как источник запроса в котором произвести сортировку(или другие действия)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Union all не может объеденить запросы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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