powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Про запрос
5 сообщений из 5, страница 1 из 1
Про запрос
    #39542937
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Есть исходные данные
Город ТТОтгрузки сумма без НДС Предыдущий месяцОтгрузки сумма без НДС Текущий месяцГород1ТТ110001200Город1ТТ11000900Город1ТТ11000nullГород1ТТ1null1200Город1ТТ1-1201200............

Ножно посчитать количество ТТ по каждому городу при положительных отгрузках с итоговой строкой. Для этого написал такой 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
	Т1.`Город`,
	COUNT(
		IIF(`Отгрузки сумма без НДС Предыдущий месяц`>0,`Отгрузки сумма без НДС Предыдущий месяц`,Null)
		) AS `Количество ТТ Предыдущий месяц`,
	COUNT(
		IIF(`Отгрузки сумма без НДС Текущий месяц`>0,`Отгрузки сумма без НДС Текущий месяц`,Null)
		) AS `Количество ТТ Текущий месяц`,
	`Количество ТТ Текущий месяц`-`Количество ТТ Предыдущий месяц` AS `Дельта`
FROM
	`Иcходные данные$` Т1
GROUP BY
	Т1.`Город`)

UNION

(SELECT
	'Итого' AS Т1.`Город`,
	COUNT(
		IIF(`Отгрузки сумма без НДС Предыдущий месяц`>0,`Отгрузки сумма без НДС Предыдущий месяц`,Null)
		) AS `Количество ТТ Предыдущий месяц`,
	COUNT(
		IIF(`Отгрузки сумма без НДС Текущий месяц`>0,`Отгрузки сумма без НДС Текущий месяц`,Null)
		) AS `Количество ТТ Текущий месяц`,
	`Количество ТТ Текущий месяц`-`Количество ТТ Предыдущий месяц` AS `Дельта`
FROM
	`Иcходные данные$` Т1)



Все работает. Но, итоговая строка находится посередине.
Город Количество ТТ Предыдущий месяцКоличество ТТ Текущий месяцГород134Город256Город378Итого3033_Город443_Город557.........

1. Как сделать так, чтобы итоговая строка была в конце?
2. Возможно ли было запрос как то напиcать по проще и оптимальнее?
...
Рейтинг: 0 / 0
Про запрос
    #39542945
ferzmikkЗдравствуйте!

Есть исходные данные
Город ТТОтгрузки сумма без НДС Предыдущий месяцОтгрузки сумма без НДС Текущий месяцГород1ТТ110001200Город1ТТ11000900Город1ТТ11000nullГород1ТТ1null1200Город1ТТ1-1201200............

Ножно посчитать количество ТТ по каждому городу при положительных отгрузках с итоговой строкой. Для этого написал такой 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
	Т1.`Город`,
	COUNT(
		IIF(`Отгрузки сумма без НДС Предыдущий месяц`>0,`Отгрузки сумма без НДС Предыдущий месяц`,Null)
		) AS `Количество ТТ Предыдущий месяц`,
	COUNT(
		IIF(`Отгрузки сумма без НДС Текущий месяц`>0,`Отгрузки сумма без НДС Текущий месяц`,Null)
		) AS `Количество ТТ Текущий месяц`,
	`Количество ТТ Текущий месяц`-`Количество ТТ Предыдущий месяц` AS `Дельта`
FROM
	`Иcходные данные$` Т1
GROUP BY
	Т1.`Город`)

UNION

(SELECT
	'Итого' AS Т1.`Город`,
	COUNT(
		IIF(`Отгрузки сумма без НДС Предыдущий месяц`>0,`Отгрузки сумма без НДС Предыдущий месяц`,Null)
		) AS `Количество ТТ Предыдущий месяц`,
	COUNT(
		IIF(`Отгрузки сумма без НДС Текущий месяц`>0,`Отгрузки сумма без НДС Текущий месяц`,Null)
		) AS `Количество ТТ Текущий месяц`,
	`Количество ТТ Текущий месяц`-`Количество ТТ Предыдущий месяц` AS `Дельта`
FROM
	`Иcходные данные$` Т1)



Все работает. Но, итоговая строка находится посередине.
Город Количество ТТ Предыдущий месяцКоличество ТТ Текущий месяцГород134Город256Город378Итого3033_Город443_Город557.........

1. Как сделать так, чтобы итоговая строка была в конце?
2. Возможно ли было запрос как то напиcать по проще и оптимальнее?
1. например, использовать UNION ALL вместо UNION
2. например
Код: vbnet
1.
2.
3.
4.
'вместо выражений вида
COUNT(IIF(`Отгрузки сумма без НДС Предыдущий месяц`>0,`Отгрузки сумма без НДС Предыдущий месяц`,Null)) AS ...
'использовать
-SUM(`Отгрузки сумма без НДС Предыдущий месяц`>0) AS ...
...
Рейтинг: 0 / 0
Про запрос
    #39542947
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
непоймучка1. Как сделать так, чтобы итоговая строка была в конце?
2. Возможно ли было запрос как то напиcать по проще и оптимальнее?
1. например, использовать UNION ALL вместо UNIONТут получилось
2. например
Код: vbnet
1.
2.
3.
4.
'вместо выражений вида
COUNT(IIF(`Отгрузки сумма без НДС Предыдущий месяц`>0,`Отгрузки сумма без НДС Предыдущий месяц`,Null)) AS ...
'использовать
-SUM(`Отгрузки сумма без НДС Предыдущий месяц`>0) AS ...

Тут тоже получилось, но не пойму почему при использовании функции SUM возвращается не сумма, а количество, да еще отрицательное.
...
Рейтинг: 0 / 0
Про запрос
    #39542957
ferzmikkнепоймучка1. Как сделать так, чтобы итоговая строка была в конце?
2. Возможно ли было запрос как то напиcать по проще и оптимальнее?
1. например, использовать UNION ALL вместо UNIONТут получилось
2. например
Код: vbnet
1.
2.
3.
4.
'вместо выражений вида
COUNT(IIF(`Отгрузки сумма без НДС Предыдущий месяц`>0,`Отгрузки сумма без НДС Предыдущий месяц`,Null)) AS ...
'использовать
-SUM(`Отгрузки сумма без НДС Предыдущий месяц`>0) AS ...

Тут тоже получилось, но не пойму почему при использовании функции SUM возвращается не сумма, а количество, да еще отрицательное.Потому что SUM(...) суммирует результат выражения, которое указано в качестве его аргумента, в данном случае это выражение:
Код: vbnet
1.
`Отгрузки сумма без НДС Предыдущий месяц`>0


Это булевское выражение, результат которого либо TRUE(-1) либо FALSE(0)

Таким образом, этот SUM суммирует '-1' для каждой записи, где выполняется данное условие и '0' для записей, где это условие не выполняется, т.е. по факту просто считает записи, где выполняется ваше условие и выдает в результате тот же COUNT, только с минусом.
...
Рейтинг: 0 / 0
Про запрос
    #39542959
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
непоймучка,

Спасибо!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Про запрос
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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