powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Не работает простейший LEFT JOIN
33 сообщений из 33, показаны все 2 страниц
Не работает простейший LEFT JOIN
    #39256525
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем!
Второй день не могу разобраться почему не работает простой LEFT JOIN в MS ACCESS 2013.
Имеем 2 запроса, которые выдают 2 простые таблицы такого вида:

Запрос 1 "SelectPgWk"

Код: plaintext
1.
2.
3.
4.
5.
6.
Weeks	PG
201624	Cat1
201624	Cat2
201623	Cat1
201623	Cat2
201622	Cat1
201622	Cat2

Запрос 2 "SelectPgWkVal"

Код: plaintext
1.
2.
3.
4.
5.
6.
Weeks	PG	SumValue
201624	Cat1	3311,13
201622	Cat2	757,25
201621	Cat3	2114,23
201620	Cat3	11456,66
201619	Cat2	11768,99
201617	Cat4	95,59

Необходимо ко всем строкам первой таблицы добавить 3-ю колонку второй таблицы где совпадают первые две, как-то так:

Код: plaintext
1.
2.
3.
4.
5.
6.
Weeks	PG	Res
201624	Cat1	3311,13
201624	Cat2	0
201623	Cat1	0
201623	Cat2	0
201622	Cat1	0
201622	Cat2	757,25

Пишу вот такой запрос:

Код: sql
1.
2.
SELECT W.Weeks, W.PG, V.SumValue AS Res
FROM SelectPgWk AS W LEFT JOIN SelectPgWkVal AS V ON ((W.PG = V.PG) AND (W.Weeks = V.Weeks));



.. и получаю пустую колонку Res:

Код: plaintext
1.
2.
3.
4.
5.
6.
Weeks	PG	Res
201622	Cat1	
201623	Cat1	
201624	Cat1	
201622	Cat2	
201623	Cat2	
201624	Cat2	

Ткните пожалуйста неопытного где я туплю.
Заранее благодарен.
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39256557
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну очень странно...
Начни проверку с того, что сохрани выборки в виде статических таблиц и проверь, нормально ли выполняется связывание с ними.
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39256560
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На лишние пробелы/спецзнаки похоже
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39256563
Alex Pancho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SumValue - вычисляемое или статичное? Что выходит при INNER или RIGTH Join?
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39256618
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а какие таблицы источники запросов,откуда берется поле SUM, какова структура-короче покажите БД
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39256853
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

сохранил, выполнил тот же запрос - все работает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Weeks	PG	Res
201624	Cat1	3311,13
201624	Cat2	0
201623	Cat1	0
201623	Cat2	0
201622	Cat1	0
201622	Cat2	757,25
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39256854
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MrShinНа лишние пробелы/спецзнаки похоже

Можно конкретнее в каком месте их искать? Запросы переписаны с нуля несколько раз и сами по себе работают.
Запрос JOIN скопирован и работает на статических таблицах.
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39256860
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_triffleМожно конкретнее в каком месте их искать?
Для теста я бы попытался запустить оба запроса, из строки первого запроса, которая точно должна матчиться со вторым скопировать значения, по которым идет связь и отфильтровать по ним второй запрос. Если в результате все строки исчезнут, значит значения не равны и нужно искать. Иначе... чудеса в решете какие то получаютс.

Что выдает запрос, если LEFT JOIN заменить на обычный? Ну или mdb дайте посмотреть, так проще будет.
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39256863
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие типы имеют поля в запросах?
Попробуй сделать стандартизацию типа - например, trim строковых значений или там округление числовых...
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39256933
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex PanchoSumValue - вычисляемое или статичное? Что выходит при INNER или RIGTH Join?
SumValue - вычисляемое, сумма

INNER JOIN - не выводит ни одной строки
RIGTH JOIN - не выводит ни одной строки
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39256946
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuа какие таблицы источники запросов,откуда берется поле SUM, какова структура-короче покажите БД

Структуры для этих запросов нет - оба запроса берутся из одной таблицы: первый выбирает 3 максимальные Weeks и все PG, которые были в этих Weeks; второй выбирает сумму поля на каждую пару Weeks и PG. В первом запросе есть декартово перемножение таблиц уникальных Weeks и PG что бы нулевые значения из второй таблицы так же попали в выборку.
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257268
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaКакие типы имеют поля в запросах?
Попробуй сделать стандартизацию типа - например, trim строковых значений или там округление числовых...

округлил цифровые, сделал TRIM на текстовые в обеих запросах, не прокатило
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257293
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_triffleокруглил цифровые
Округления недостаточно. Связывать по полю с плавающей точкой крайне не рекомендуется из-за проблем с округлениями. Попробуйте явно конвертировать в целое
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257301
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вообще пора бы просто выложить почищенную от лишнего хлама базу.
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257304
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДАВНО ПОРА
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257619
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощения за задержку, прикрепил очищенную базу.
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257629
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_triffleприкрепил очищенную базу
А в формат 97-2002 (MDB) конвертануть не догадался? не у всех стоИт самая распоследняя версия...
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257651
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда и опишу общую задачу:
есть значения ("ResultValue"), скажем продаж, за несколько недель ("Weeeks") по отдельным магазинам "Entity code", товарным категориям "Product group" и с параметром "StockDaysRangeShort"
Необходимо получить сумму этих продаж в разрезе товарных категорий, за последние 3 недели, по условию "магазин есть в отдельной таблице SAM_Entities_Selection" и параметр равен "(180,360]". При этом пустые строки так же должны попасть в результат с нулем.
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257656
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinairbis_triffleприкрепил очищенную базу
А в формат 97-2002 (MDB) конвертануть не догадался? не у всех стоИт самая распоследняя версия...

Ругается на невозможность понижения версии, сейчас попробую что-то наколдовать.
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257668
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_triffleРугается на невозможность понижения версии
Да выгрузи ты таблицы в CSV и запросы текстом, делов-то...
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257734
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinairbis_triffleРугается на невозможность понижения версии
Да выгрузи ты таблицы в CSV и запросы текстом, делов-то...

Сделал

Запросы:

SAM_ValueSumByWeeksByEntityByCategoryPastYear
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT Sum(StockValue.ResultValue) AS [Sum-ResultValue], StockValue.[Weeek] AS Week, StockValue.[Entity code] AS Entity, StockValue.StockDaysRangeShort AS StockDaysRangeShort, StockValue.[>60] AS Plus60, StockValue.[Product group] AS [Product group]
FROM Stock AS StockValue
WHERE (NOT StockValue.[Product group] = "LED Lighting" 
				     AND NOT StockValue.[Product group] = "Power Battery"
     				AND StockValue.[Entity code] IN (SELECT SAM_Entities_Selection.[Entity code] AS TargetEntity 
                                                       											FROM SAM_Entities_Selection))
GROUP BY StockValue.[Weeek], StockValue.[Entity code], StockValue.StockDaysRangeShort, StockValue.[Product group], StockValue.[>60];



SelectPgWk
Код: sql
1.
2.
SELECT ROUND(PgWk.Weeks,0) AS Weeks, TRIM(PgWk.PG) AS PG
FROM (SELECT Top3Weeks.Weeks, PGs.PG FROM Top3Weeks, (SELECT DISTINCT Val.[Product group] AS PG FROM SAM_ValueSumByWeeksByEntityByCategoryPastYear AS Val LEFT JOIN Top3Weeks AS T3W ON T3W.Weeks = Val.Week WHERE (NOT Val.[Product group] = "Cat0"  			AND NOT Val.[Product group] = "Cat1" 			AND Val.StockDaysRangeShort = "(180,360]" 			AND Val.Entity IN (SELECT SAM_Entities_Selection.[Entity code] AS TargetEntity FROM SAM_Entities_Selection) 			AND NOT IsNull(T3W.Weeks)))  AS PGs)  AS PgWk;



SelectPgWkVal
Код: sql
1.
2.
3.
SELECT ROUND(SAM_ValueSumByWeeksByEntityByCategoryPastYear.Week,0) AS Weeks, TRIM(SAM_ValueSumByWeeksByEntityByCategoryPastYear.[Product group]) AS PG, ROUND(SAM_ValueSumByWeeksByEntityByCategoryPastYear.[Sum-ResultValue],2) AS SumValue
FROM SAM_ValueSumByWeeksByEntityByCategoryPastYear
WHERE (((SAM_ValueSumByWeeksByEntityByCategoryPastYear.StockDaysRangeShort)="(180,360]") AND ((SAM_ValueSumByWeeksByEntityByCategoryPastYear.Entity) In (SELECT SAM_Entities_Selection.[Entity code] AS TargetEntity FROM SAM_Entities_Selection)));



Top3Weeks
Код: sql
1.
2.
SELECT TOP 3 [%$##@_Alias].TopWeeks AS Weeks
FROM (SELECT DISTINCT (Stock.[Weeek]) AS TopWeeks FROM Stock ORDER BY Stock.[Weeek] DESC)  AS [%$##@_Alias];



И тот запрос, в котором я хочу получить результат:

Запрос1
Код: sql
1.
2.
SELECT W.Weeks, W.PG, V.SumValue AS Res
FROM SelectPgWk AS W LEFT JOIN SelectPgWkVal AS V ON ((W.PG = V.PG) AND (W.Weeks = V.Weeks));
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257745
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_triffle,
вычисляемые поля в stock00 можно заменить на запрос stock
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257749
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКАirbis_triffle,
вычисляемые поля в stock00 можно заменить на запрос stock

Не совсем понимаю для чего это делать..
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257777
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_triffle, наблюдаю странную вещь - подзапрос SelectPgWkVal AS V не возвращает записи в этом запросе. Для проверки попробуй простое
Код: sql
1.
2.
SELECT SelectPgWk.Weeks, SelectPgWk.PG, SelectPgWkVal.Weeks, SelectPgWkVal.PG, SelectPgWkVal.SumValue
FROM SelectPgWk, SelectPgWkVal;


Вместо ожидаемого декарта с 6*8=48 записями имеем отсутствие записей.
Полагаю, причина в том, что на каком-то этапе выполнения какого-то подзапроса таблица блокируется, и другой подзапрос не получает к ней доступа.
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257778
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PS. Мог бы и проверить, что выкладываешь... пришлось править твои запросы, чтобы они работали.
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257779
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPS. Запрос Top3Weeks переписал как
Код: sql
1.
2.
3.
4.
SELECT TOP 3 Stock.Week AS Weeks
FROM Stock
GROUP BY Stock.Week
ORDER BY Stock.Week DESC;

А то смотреть страшно...
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257787
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaPS. Мог бы и проверить, что выкладываешь... пришлось править твои запросы, чтобы они работали.

Видно в процессе обрезки базы ошибся.. Виноват, исправлюсь
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257789
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaPPS. Запрос Top3Weeks переписал как
Код: sql
1.
2.
3.
4.
SELECT TOP 3 Stock.Week AS Weeks
FROM Stock
GROUP BY Stock.Week
ORDER BY Stock.Week DESC;

А то смотреть страшно...

о0 ТОП3 без выбора уникальных? пойду матчасть почитаю
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257790
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_triffleТОП3 без выбора уникальных?Гуп бай увидь...
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257868
guest_rusimport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
irbis_triffle,
от DISTINCT -ов надо было везде отказаться )
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257967
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akinairbis_triffleТОП3 без выбора уникальных?Гуп бай увидь...

Понял, применил
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257968
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
guest_rusimportirbis_triffle,
от DISTINCT -ов надо было везде отказаться )

Работает, только считает где-то неправильно))
...
Рейтинг: 0 / 0
Не работает простейший LEFT JOIN
    #39257978
irbis_triffle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, guest_rusimport,
спасибо! переписал запрос без DISTINCT и обращений ко вложенным запросам - все сработало на ура)))

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT WkPgQuery.ProductGroup, WkPgQuery.Weeek, IIF(IsNull(SUM(ValueQuery.ResultValue)),0,SUM(ValueQuery.ResultValue)) AS ResultValue
FROM (SELECT PGQuery.ProductGroup, WkQuery2.Weeek
FROM(SELECT S.[Product group] AS ProductGroup FROM Stock AS S GROUP BY S.[Product group]) AS PGQuery, 
(SELECT TOP 3 Stock.Weeek AS Weeek FROM Stock GROUP BY Stock.Weeek ORDER BY Stock.Weeek DESC) AS WkQuery2)  AS WkPgQuery LEFT JOIN (SELECT ValueQueryInner.ProductGroup, ValueQueryInner.Weeek, ValueQueryInner.StockDaysRangeShort, ValueQueryInner.EntityCode, ValueQueryInner.ResultValue
FROM (SELECT Stock.[Product group] AS ProductGroup, Stock.Weeek, Stock.StockDaysRangeShort, Stock.[Entity code] AS EntityCode, SUM(Stock.ResultValue) AS ResultValue
FROM Stock WHERE (Stock.StockDaysRangeShort IN (SELECT SAM_Age_Selection.Age AS Age FROM SAM_Age_Selection) AND Stock.[Entity code] IN (SELECT SAM_Entities_Selection.[Entity code] AS TargetEntity FROM SAM_Entities_Selection))
GROUP BY Stock.[Product group], Stock.Weeek, Stock.StockDaysRangeShort, Stock.[Entity code]) AS ValueQueryInner)  AS ValueQuery ON (ValueQuery.ProductGroup = WkPgQuery.ProductGroup) AND (ValueQuery.Weeek = WkPgQuery.Weeek)
GROUP BY WkPgQuery.ProductGroup, WkPgQuery.Weeek;



преобразовал условие Stock.StockDaysRangeShort = "(180,360]"' в запрос к таблице Stock.StockDaysRangeShort IN (SELECT SAM_Age_Selection.Age AS Age FROM SAM_Age_Selection) , т.к. excel при обращении к такой конструкции ругался на синтаксис :(
...
Рейтинг: 0 / 0
33 сообщений из 33, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Не работает простейший LEFT JOIN
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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