Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопрос по запросу / 5 сообщений из 5, страница 1 из 1
16.12.2016, 16:07
    #39368777
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по запросу
Здравствуйте!

Есть исходная таблица
Код ТТ Общее SKU SKU Кол SKU в Общем SKU Процент возвратаТТ569 SKU1/SKU2 SKU1 2 0.3ТТ569 SKU1/SKU2 SKU2 2 0.2ТТ569 SKU3/SKU4 SKU3 2 0ТТ569 SKU3/SKU4 SKU4 2 0.23ТТ569 SKU5 SKU5 1 0.2ТТ569 SKU6/SKU7 SKU6 2 0ТТ569 SKU6/SKU7 SKU7 2 0 ТТ569 SKU10/SK11 SKU10 2 0.42ТТ569 SKU10/SK11 SKU11 2 0.42
Тут логика такая, что у Общего SKU может быть один или больше SKU .

Нужен такой результат
Код ТТ Общее SKU SKU Кол SKU в Общем SKU Процент возврата РезультатТТ569 SKU1/SKU2 SKU1 2 0.3 ТТ569 SKU1/SKU2 SKU2 2 0.2 ДаТТ569 SKU3/SKU4 SKU3 2 0 ДаТТ569 SKU3/SKU4 SKU4 2 0.23 ТТ569 SKU5 SKU5 1 0.2 ТТ569 SKU6/SKU7 SKU6 2 0 ТТ569 SKU6/SKU7 SKU7 2 0 Да ТТ569 SKU10/SK11 SKU10 2 0.42 ТТ569 SKU10/SK11 SKU11 2 0.42 Да
То есть для каждого общего SKU , где количество SKU в Общем SKU больше 1, нужно в поле "Результат" отметить "Да" в те SKU c наименьшим процентом возврата.

Для решения такой задачи написал такой запрос в Excel-файле
Код: 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.
SELECT
	Т1.`Код ТТ`,
	Т1.`Общее SKU`,
	Т1.`SKU`,
	Т1.`Кол SKU в Общем SKU`,
	Т1.`Процент возврата`,
	Т2.`Минимальный процент возврата`,	
	IIF (Т1.`Кол SKU в Общем SKU` > 1 AND Т1.`Процент возврата` = Т2.`Минимальный процент возврата` , 'Да', ) AS `Результат`
FROM
	`Исходные данные$` AS Т1
LEFT JOIN
	(SELECT
		Тв1.`Код ТТ`,
		Тв1.`Общее SKU`,		
		MIN(Тв1.`Процент возврата`)	AS `Минимальный процент возврата`
	FROM
		`Исходные данные$` AS Тв1
	GROUP BY
		Тв1.`Код ТТ`,
		Тв1.`Общее SKU`) AS Т2		
ON
	Т1.`Код ТТ` = Т2.`Код ТТ`
	AND
	Т1.`Общее SKU` = Т2.`Общее SKU`


И получается такой результат

Код ТТ Общее SKU SKU Кол SKU в Общем SKU Процент возврата Минимальный процент возврата РезультатТТ569 SKU1/SKU2 SKU1 2 0.3 0.3 ТТ569 SKU1/SKU2 SKU2 2 0.2 0.2 ДаТТ569 SKU3/SKU4 SKU3 2 0 0 ДаТТ569 SKU3/SKU4 SKU4 2 0.23 0.23 ТТ569 SKU5 SKU5 1 0.20.2 ТТ569 SKU6/SKU7 SKU6 2 0 0 Да ТТ569 SKU6/SKU7 SKU7 2 0 0 Да ТТ569 SKU10/SK11 SKU10 2 0.42 0.42 Да ТТ569 SKU10/SK11 SKU11 2 0.42 0.42 Да

Но тут не учитывается один фактор: если в одном общем SKU , например, "SKU10/SKU11" проценты возврата одинаковые. И в результате ставятся лишние "Да".

Если одинаковые, то в поле "Результат" указывает "Да" в одной любой внутри Общего SKU . Можно так - кроме первой строки внутри Общего SKU .

Подскажите, как в запросе это учесть? Есть то, что еще не учел?
...
Рейтинг: 0 / 0
16.12.2016, 16:23
    #39368803
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по запросу
...
Рейтинг: 0 / 0
16.12.2016, 16:48
    #39368835
Вопрос по запросу
ferzmikk, попробуйте во вложенном запросе добавить MAX([SKU]) и его добавить в IIF.
Правда в случае сравнения, например, SKU9 и SKU10 функция вернет SKU9. В вашем примере такой ситуации нет.
...
Рейтинг: 0 / 0
16.12.2016, 21:17
    #39369012
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по запросу
Анатолий ( Киев )ferzmikk, попробуйте во вложенном запросе добавить MAX([SKU]) и его добавить в IIF.
Правда в случае сравнения, например, SKU9 и SKU10 функция вернет SKU9. В вашем примере такой ситуации нет.
Скорректировал запрос.
Код: 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.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
SELECT
	ТТТТ1.`Код ТТ`,
	ТТТТ1.`Общее SKU`,
	ТТТТ1.`SKU`,
	ТТТТ1.`Кол SKU в Общем SKU`,
	ТТТТ1.`Процент возврата`,
	IIF (		(ТТТТ1.`Кол SKU в Общем SKU` > 1 AND
			ТТТТ1.`Процент возврата` = ТТТТ2.`Минимальный процент возврата` AND 
			ТТТТ2.`Кол разл Процента возврата` = ТТТТ2.`Кол Процента возврата`) 
		OR
			(ТТТТ1.`Кол SKU в Общем SKU` > 1  AND
			ТТТТ2.`Кол разл Процента возврата` <> ТТТТ2.`Кол Процента возврата` AND
			ТТТТ1.`SKU` = ТТТТ2.`Макс SKU`) ,
		'Да', ) AS `Результат`
	FROM
	`Исходные данные$` AS ТТТТ1
LEFT JOIN
	(SELECT
		ТТТ1.`Код ТТ`,
		ТТТ1.`Общее SKU`,
		ТТТ1.`Минимальный процент возврата`,
		ТТТ1.`Макс SKU`,
		ТТТ2.`Кол разл Процента возврата`,
		ТТТ1.`Кол Процента возврата`
	FROM
		(SELECT
			Т1.`Код ТТ`,
			Т1.`Общее SKU`,		
			MIN(Т1.`Процент возврата`) AS `Минимальный процент возврата`,
			Max(Т1.`SKU`) AS `Макс SKU`,
			COUNT(Т1.`Процент возврата`) AS `Кол Процента возврата`
		FROM
			`Исходные данные$` AS Т1
		GROUP BY
			Т1.`Код ТТ`,
			Т1.`Общее SKU`) AS ТТТ1
	LEFT JOIN
		(SELECT
			ТТ1.`Код ТТ`,
			ТТ1.`Общее SKU`,
			COUNT(ТТ1.`Процент возврата`) AS `Кол разл Процента возврата`
		FROM
			(SELECT DISTINCT
				Т1.`Код ТТ`,
				Т1.`Общее SKU`,
				Т1.`Процент возврата`
			FROM
				`Исходные данные$` AS Т1) AS ТТ1
		GROUP BY
			ТТ1.`Код ТТ`,
			ТТ1.`Общее SKU`) AS ТТТ2
	ON
		ТТТ1.`Код ТТ` = ТТТ2.`Код ТТ`
		AND
		ТТТ1.`Общее SKU` = ТТТ2.`Общее SKU`
) AS ТТТТ2		
ON
	ТТТТ1.`Код ТТ` = ТТТТ2.`Код ТТ`
	AND
	ТТТТ1.`Общее SKU` = ТТТТ2.`Общее SKU`


В результате так как мне надо.

Возможно ли было проще написать запрос? Есть еще не учтенные логические нюансы в запросе? Риски? Ограничение или еще особенности (помимо сравнения, например, SKU9 и SKU10 функция вернет SKU9) при использовании Max(Т1.`SKU`)? Учитывая такой момент, что возвраты пустыми быть не могут (то есть null), Общее SKU не может иметь больше 2 SKU .
...
Рейтинг: 0 / 0
16.12.2016, 21:21
    #39369013
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по запросу
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопрос по запросу / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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