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

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

Сейчас делаю через UNION и сумму, но может можно проще?
...
Рейтинг: 0 / 0
SQL сумма по годам в строчку
    #39794367
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vklpt,
стесняюсь спросить:а есть ли необходимость хранить в таблице вычисляемые поля? (она возникает крайне редко)
по-моему таблиц должно быть мин.3:
клиенты-кодК,все данные по клиентам
заказы-кодЗ,клиент,заказ,дата
главная(подчиненная заказу по кодуЗ-заказ)-код,заказ,товар,ценаЗаЕд (еще один справочник-цены),количество-при такой схеме Вы запросом с параметрами получите любые данные-кто,когда, за какой период и на какую сумму:короче, любую информацию из хранимых данных
...
Рейтинг: 0 / 0
SQL сумма по годам в строчку
    #39794374
vklpt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,
а с чего вы взяли, что у меня вычисляемые поля хранятся? С чего вы взяли, что у меня описанных вами таблиц нет?
Меня интересуют данные только из одной таблицы.
...
Рейтинг: 0 / 0
SQL сумма по годам в строчку
    #39794379
vklpt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так, забудем всё что было раньше.
Накидал в Борее как мне надо на примере СтоимостьДоставки:
...
Рейтинг: 0 / 0
SQL сумма по годам в строчку
    #39794391
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vklpt, перекрёстный запрос не спасёт?
...
Рейтинг: 0 / 0
SQL сумма по годам в строчку
    #39794483
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SQL сумма по годам в строчку
    #39794495
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
SQL сумма по годам в строчку
    #39794516
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle,
а по какому полю Sum?
и в том варианте что я предложил должно быть так:
Код: vbnet
1.
Seleсt sum(iif(year(дата)=2000;количество) as за2000,...from таблица
...
Рейтинг: 0 / 0
SQL сумма по годам в строчку
    #39794521
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle,
У нас традиция, каждый год, первого января, мы с друзьями переписываем запросы...

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

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

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

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


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

Думаю, полная стоимость заказа.
...
Рейтинг: 0 / 0
SQL сумма по годам в строчку
    #39794540
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Michelle,
полная стоимость заказа=Sum(цена*количество)-а это есть вычисляемое поле и ему не место в таблице,однако. Надоело "ванговать" и хотелось бы услышать разъяснения ТСа
...
Рейтинг: 0 / 0
SQL сумма по годам в строчку
    #39794543
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdkuэто есть вычисляемое поле и ему не место в таблице,однако.Некоторые вещи лучше фиксировать...
...
Рейтинг: 0 / 0
SQL сумма по годам в строчку
    #39794551
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku__Michelle,
полная стоимость заказа=Sum(цена*количество)-а это есть вычисляемое поле и ему не место в таблице,однако. Надоело "ванговать" и хотелось бы услышать разъяснения ТСа
Самое там и место в "запросе" причем тут таблица
...
Рейтинг: 0 / 0
SQL сумма по годам в строчку
    #39794757
vklpt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак, благодаря вам, вышло 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
SQL сумма по годам в строчку
    #39794792
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vklpt,
Вы бы показали БД и четко пояснили что хотите получить.
Время работы,очень простого, запроса в 2 секунды(молчу о 22 секундах)явно указывает на неверно спроектированную БД (а не запрос,который либо работает нормально,либо не работает вовсе).Вышесказанное верно если Вы не перепутали секунды и милисекунды-если так,то все нормально
...
Рейтинг: 0 / 0
SQL сумма по годам в строчку
    #39794807
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vklptСделал замер выполнения по 5 проходов в рабочей базе (не в Борее):
а сколько в ней записей
--локальная или сетевая
--а может линкованный DBF
...
Рейтинг: 0 / 0
SQL сумма по годам в строчку
    #39794829
vklpt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА, локальная, прилинкованная, 240000
...
Рейтинг: 0 / 0
SQL сумма по годам в строчку
    #39794866
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vklpt...22,17188 сек...

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

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

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


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