Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / SQL сумма по годам в строчку / 21 сообщений из 21, страница 1 из 1
31.03.2019, 22:04
    #39794336
vklpt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
Есть таблица с заказами. Поля:
Клиент Сумма Дата

Каким образом лучше всего получить сумму по годам в строчку, т.е. результат:
Клиент 2019 2018 2017
Иванов 450руб 750руб 900руб
Петров 410руб 150руб 50руб

Сейчас делаю через UNION и сумму, но может можно проще?
...
Рейтинг: 0 / 0
01.04.2019, 00:06
    #39794367
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
vklpt,
стесняюсь спросить:а есть ли необходимость хранить в таблице вычисляемые поля? (она возникает крайне редко)
по-моему таблиц должно быть мин.3:
клиенты-кодК,все данные по клиентам
заказы-кодЗ,клиент,заказ,дата
главная(подчиненная заказу по кодуЗ-заказ)-код,заказ,товар,ценаЗаЕд (еще один справочник-цены),количество-при такой схеме Вы запросом с параметрами получите любые данные-кто,когда, за какой период и на какую сумму:короче, любую информацию из хранимых данных
...
Рейтинг: 0 / 0
01.04.2019, 00:32
    #39794374
vklpt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
sdku,
а с чего вы взяли, что у меня вычисляемые поля хранятся? С чего вы взяли, что у меня описанных вами таблиц нет?
Меня интересуют данные только из одной таблицы.
...
Рейтинг: 0 / 0
01.04.2019, 00:48
    #39794379
vklpt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
Так, забудем всё что было раньше.
Накидал в Борее как мне надо на примере СтоимостьДоставки:
...
Рейтинг: 0 / 0
01.04.2019, 03:58
    #39794391
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
vklpt, перекрёстный запрос не спасёт?
...
Рейтинг: 0 / 0
01.04.2019, 11:19
    #39794483
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
vklptsdku,
а с чего вы взяли, что у меня вычисляемые поля хранятся? 1.с этого vklptЕсть таблица с заказами. Поля:
Клиент Сумма Дата2.
Код: vbnet
1.
Seleсt sum(iif(year(дата)=2000;количество;0) as за2000...from..where sum(iif(year(дата)=2000;количество;0)>0
...
Рейтинг: 0 / 0
01.04.2019, 11:31
    #39794495
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
vklpt,
Код: sql
1.
2.
3.
4.
5.
6.
SELECT Клиент, 
       -Sum(Сумма*(Year(Дата)=2019)) As [2019],
       -Sum(Сумма*(Year(Дата)=2018)) As [2018],
       -Sum(Сумма*(Year(Дата)=2017)) As [2017]
FROM Заказы
GROUP BY Клиент
...
Рейтинг: 0 / 0
01.04.2019, 12:04
    #39794516
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
__Michelle,
а по какому полю Sum?
и в том варианте что я предложил должно быть так:
Код: vbnet
1.
Seleсt sum(iif(year(дата)=2000;количество) as за2000,...from таблица
...
Рейтинг: 0 / 0
01.04.2019, 12:09
    #39794521
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
__Michelle,
У нас традиция, каждый год, первого января, мы с друзьями переписываем запросы...

Код: sql
1.
2.
3.
4.
5.
TRANSFORM  Sum(Заказы.[Стоимость доставки]) AS [неважно]
SELECT Заказы.[Клиент]
FROM Заказы
GROUP BY Заказы.[Клиент]
PIVOT Year(Заказы.[Дата размещения]);
...
Рейтинг: 0 / 0
01.04.2019, 12:09
    #39794522
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
sdku,

По полю Сумма.
Список полей таблицы указан в стартовом сообщении темы.
Там нет только названия таблицы. Я приняла "Заказы".

Я Ваш вариант не рассматривала.
...
Рейтинг: 0 / 0
01.04.2019, 12:10
    #39794523
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
вдогонку:
я никак не вкурю-поле сумма это какая-то единичная сумма(стоимость доставки) или сумма заказа-нескольких наименований
...
Рейтинг: 0 / 0
01.04.2019, 12:11
    #39794526
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
Панург__Michelle,
У нас традиция, каждый год, первого января, мы с друзьями переписываем запросы...

Код: sql
1.
2.
3.
4.
5.
TRANSFORM  Sum(Заказы.[Стоимость доставки]) AS [неважно]
SELECT Заказы.[Клиент]
FROM Заказы
GROUP BY Заказы.[Клиент]
PIVOT Year(Заказы.[Дата размещения]);


Первого апреля как-то приятнее.)))
...
Рейтинг: 0 / 0
01.04.2019, 12:12
    #39794527
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
sdku,

Думаю, полная стоимость заказа.
...
Рейтинг: 0 / 0
01.04.2019, 12:53
    #39794540
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
__Michelle,
полная стоимость заказа=Sum(цена*количество)-а это есть вычисляемое поле и ему не место в таблице,однако. Надоело "ванговать" и хотелось бы услышать разъяснения ТСа
...
Рейтинг: 0 / 0
01.04.2019, 12:56
    #39794543
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
sdkuэто есть вычисляемое поле и ему не место в таблице,однако.Некоторые вещи лучше фиксировать...
...
Рейтинг: 0 / 0
01.04.2019, 13:00
    #39794551
ROI
ROI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
sdku__Michelle,
полная стоимость заказа=Sum(цена*количество)-а это есть вычисляемое поле и ему не место в таблице,однако. Надоело "ванговать" и хотелось бы услышать разъяснения ТСа
Самое там и место в "запросе" причем тут таблица
...
Рейтинг: 0 / 0
01.04.2019, 18:05
    #39794757
vklpt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
Итак, благодаря вам, вышло 4 варианта. Сделал замер выполнения по 5 проходов в рабочей базе (не в Борее):
1. Самый тупой вариант :D от меня:
SELECT Клиент, (SELECT Sum(Сумма) FROM Заказы WHERE Year(Дата) = 2016 AND Заказы.Клиент = Клиенты.Клиент) AS 2016...

Время: 2,664063 сек

2. Самый бинарный от Мишель: 22,17188 сек

3. Самый красивый от Панурга: 5,195313 сек

4. Мой любимый, но не совсем подходящий для этого случая:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT Клиент, Sum(Sum16) AS 2016, Sum(Sum17) AS 2017, Sum(Sum18) AS 2018, Sum(Sum19) AS 2019
FROM (SELECT Клиент, Sum(Сумма) AS sum16, 0 AS sum17, 0 as sum18, 0 as sum19
FROM Заказы
WHERE Year(Дата) = 2016
GROUP BY Клиент

UNION ALL
SELECT Клиент, 0, Sum(Сумма), 0, 0
FROM Заказы
WHERE Year(Дата) = 2017
GROUP BY Клиент

и т.д.



время 21,94531 сек

Штош, тупой не значит медленный :)
...
Рейтинг: 0 / 0
01.04.2019, 19:01
    #39794792
sdku
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
vklpt,
Вы бы показали БД и четко пояснили что хотите получить.
Время работы,очень простого, запроса в 2 секунды(молчу о 22 секундах)явно указывает на неверно спроектированную БД (а не запрос,который либо работает нормально,либо не работает вовсе).Вышесказанное верно если Вы не перепутали секунды и милисекунды-если так,то все нормально
...
Рейтинг: 0 / 0
01.04.2019, 19:27
    #39794807
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
vklptСделал замер выполнения по 5 проходов в рабочей базе (не в Борее):
а сколько в ней записей
--локальная или сетевая
--а может линкованный DBF
...
Рейтинг: 0 / 0
01.04.2019, 20:29
    #39794829
vklpt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
ПЕНСИОНЕРКА, локальная, прилинкованная, 240000
...
Рейтинг: 0 / 0
01.04.2019, 22:15
    #39794866
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL сумма по годам в строчку
vklpt...22,17188 сек...

Я, значит, замыкаю шеренгу...

Ну, ладно. Будем учиться.

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


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