Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 SQL сумма по годам в строчку  [new]
vklpt
Member

Откуда:
Сообщений: 18
Есть таблица с заказами. Поля:
Клиент Сумма Дата

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

Сейчас делаю через UNION и сумму, но может можно проще?
31 мар 19, 22:04    [21848458]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6263
vklpt,
стесняюсь спросить:а есть ли необходимость хранить в таблице вычисляемые поля? (она возникает крайне редко)
по-моему таблиц должно быть мин.3:
клиенты-кодК,все данные по клиентам
заказы-кодЗ,клиент,заказ,дата
главная(подчиненная заказу по кодуЗ-заказ)-код,заказ,товар,ценаЗаЕд (еще один справочник-цены),количество-при такой схеме Вы запросом с параметрами получите любые данные-кто,когда, за какой период и на какую сумму:короче, любую информацию из хранимых данных
1 апр 19, 00:06    [21848545]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
vklpt
Member

Откуда:
Сообщений: 18
sdku,
а с чего вы взяли, что у меня вычисляемые поля хранятся? С чего вы взяли, что у меня описанных вами таблиц нет?
Меня интересуют данные только из одной таблицы.
1 апр 19, 00:32    [21848572]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
vklpt
Member

Откуда:
Сообщений: 18
Так, забудем всё что было раньше.
Накидал в Борее как мне надо на примере СтоимостьДоставки:

К сообщению приложен файл. Размер - 54Kb
1 апр 19, 00:48    [21848584]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4374
vklpt, перекрёстный запрос не спасёт?
1 апр 19, 03:58    [21848616]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6263
vklpt
sdku,
а с чего вы взяли, что у меня вычисляемые поля хранятся?
1.с этого
vklpt
Есть таблица с заказами. Поля:
Клиент Сумма Дата
2.
Seleсt sum(iif(year(дата)=2000;количество;0) as за2000...from..where sum(iif(year(дата)=2000;количество;0)>0
1 апр 19, 11:19    [21848760]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
vklpt,
SELECT Клиент, 
       -Sum(Сумма*(Year(Дата)=2019)) As [2019],
       -Sum(Сумма*(Year(Дата)=2018)) As [2018],
       -Sum(Сумма*(Year(Дата)=2017)) As [2017]
FROM Заказы
GROUP BY Клиент
1 апр 19, 11:31    [21848775]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6263
__Michelle,
а по какому полю Sum?
и в том варианте что я предложил должно быть так:
Seleсt sum(iif(year(дата)=2000;количество) as за2000,...from таблица
1 апр 19, 12:04    [21848814]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4374
__Michelle,
У нас традиция, каждый год, первого января, мы с друзьями переписываем запросы... Картинка с другого сайта.
TRANSFORM  Sum(Заказы.[Стоимость доставки]) AS [неважно]
SELECT Заказы.[Клиент]
FROM Заказы
GROUP BY Заказы.[Клиент]
PIVOT Year(Заказы.[Дата размещения]);
1 апр 19, 12:09    [21848820]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
sdku,

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

Я Ваш вариант не рассматривала.
1 апр 19, 12:09    [21848822]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6263
вдогонку:
я никак не вкурю-поле сумма это какая-то единичная сумма(стоимость доставки) или сумма заказа-нескольких наименований
1 апр 19, 12:10    [21848823]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
Панург
__Michelle,
У нас традиция, каждый год, первого января, мы с друзьями переписываем запросы... Картинка с другого сайта.
TRANSFORM  Sum(Заказы.[Стоимость доставки]) AS [неважно]
SELECT Заказы.[Клиент]
FROM Заказы
GROUP BY Заказы.[Клиент]
PIVOT Year(Заказы.[Дата размещения]);

Первого апреля как-то приятнее.)))
1 апр 19, 12:11    [21848826]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
sdku,

Думаю, полная стоимость заказа.
1 апр 19, 12:12    [21848828]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6263
__Michelle,
полная стоимость заказа=Sum(цена*количество)-а это есть вычисляемое поле и ему не место в таблице,однако. Надоело "ванговать" и хотелось бы услышать разъяснения ТСа
1 апр 19, 12:53    [21848853]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4374
sdku
это есть вычисляемое поле и ему не место в таблице,однако.
Некоторые вещи лучше фиксировать...
1 апр 19, 12:56    [21848857]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 1789
sdku
__Michelle,
полная стоимость заказа=Sum(цена*количество)-а это есть вычисляемое поле и ему не место в таблице,однако. Надоело "ванговать" и хотелось бы услышать разъяснения ТСа

Самое там и место в "запросе" причем тут таблица
1 апр 19, 13:00    [21848868]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
vklpt
Member

Откуда:
Сообщений: 18
Итак, благодаря вам, вышло 4 варианта. Сделал замер выполнения по 5 проходов в рабочей базе (не в Борее):
1. Самый тупой вариант :D от меня:
SELECT Клиент, (SELECT Sum(Сумма) FROM Заказы WHERE Year(Дата) = 2016 AND Заказы.Клиент = Клиенты.Клиент) AS 2016...

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

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

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

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

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 сек

Штош, тупой не значит медленный :)
1 апр 19, 18:05    [21849241]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6263
vklpt,
Вы бы показали БД и четко пояснили что хотите получить.
Время работы,очень простого, запроса в 2 секунды(молчу о 22 секундах)явно указывает на неверно спроектированную БД (а не запрос,который либо работает нормально,либо не работает вовсе).Вышесказанное верно если Вы не перепутали секунды и милисекунды-если так,то все нормально
1 апр 19, 19:01    [21849319]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4599
vklpt
Сделал замер выполнения по 5 проходов в рабочей базе (не в Борее):

а сколько в ней записей
--локальная или сетевая
--а может линкованный DBF
1 апр 19, 19:27    [21849344]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
vklpt
Member

Откуда:
Сообщений: 18
ПЕНСИОНЕРКА, локальная, прилинкованная, 240000
1 апр 19, 20:29    [21849402]     Ответить | Цитировать Сообщить модератору
 Re: SQL сумма по годам в строчку  [new]
__Michelle
Member

Откуда:
Сообщений: 3111
vklpt
...22,17188 сек...

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

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

Сохраню тему в избранное.
1 апр 19, 22:15    [21849492]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить