Member 13410460 Ответов: 1

Как мне получить общую сумму в месяц ?


Всем привет,

Я написал этот код , чтобы получить свою сумму расходов, которую он сделал за один месяц, но он работает не так, как я хочу.

Вот этот код :

 SELECT  SUM(Price) AS 'Total' , Sum (CONVERT(INT, CONVERT(VARCHAR(MAX),quantity))) as NOA, Store as 'Store',
  CONVERT(char(7), Date, 120) as 'Month',
  Datepart(Day,date) as 'Day'
FROM [dbo].[ShareCost]
where CONVERT(char(7), Date, 120) =   '2020-08' -- @DateD
GROUP BY Description  , CONVERT(char(7), Date, 120),Store,Datepart(Day,date)
ORDER BY SUM(Price) DESC


и вот результат :
60.36	40	LIDL	2020-08	18
53.80	56	LIDL	2020-08	25
52.55	32	Edeka	2020-08	4
49.74	46	LIDL	2020-08	14
46.37	31	Edeka	2020-08	10
34.35	23	Edeka	2020-08	1
34.00	34	LIDL	2020-08	22
32.84	3	dean & david	2020-08	8
32.36	18	REWE	2020-08	15
27.25	18	Edeka	2020-08	8
25.20	12	Edeka	2020-08	13
22.30	14	Edeka	2020-08	20
13.13	5	Edeka	2020-08	5
10.81	9	Edeka	2020-08	6
9.89	7	Edeka	2020-08	3
5.25	5	Barbarosa	2020-08	2
5.00	7	T Store	2020-08	23
4.90	3	Grotz	2020-08	2
3.90	3	Edeka	2020-08	17


Мне нужно, чтобы результаты были похожи на LIDL и общую сумму всех Lidl и чисел за месяц, а не за день.

Что я уже пробовал:

Я провел некоторое исследование в google, но этот случай специфичен, я пробовал с кодом TOP 5, но все же он дает мне топ-5 в списке.

Любая помощь очень ценится.

1 Ответов

Рейтинг:
4

OriginalGriff

GROUP BY работает не так: каждый раз, когда вы добавляете поле в предложение GROUP BY, вы увеличение количество групп вы создаете, а не уменьшаете его.
Эффективно, о чем ты говоришь

GROUP BY Column1 THEN BY Column2 THEN BY Column3


Кроме того, предложение GROUP BY означает, что вы можете возвращать данные только с включением столбца GROUP и статистическая функция например, сумма, макс, мин и так далее.

Если вы хотите получить общий плюс другие неагрегатная информация, которую нужно использовать, чтобы присоединиться к "комбинат" группы выберите команду с не сгруппированным выбрать.


Member 13410460

Спасибо за ваш ответ, но в таком случае, как мне присоединиться?

OriginalGriff

Сначала подумайте о том, что именно вы пытаетесь сделать, какие данные поступают откуда, какие данные агрегируются, а какие нет.
Затем напишите агрегат SELECT и протестируйте его.
Затем добавить остальные ВАИ соединения.

Я не могу сделать это для вас - я понятия не имею, что такое ваши входные данные, или что вы на самом деле хотите!

Member 13410460

Спасибо за ваш ответ, Ну, у меня есть сумма цены и количества, но я не могу суммировать магазин, который является LIDL и EDEKA, так как они являются NVARCHAR(50).

И я хочу, чтобы в месяце 2020-08 у меня была общая сумма каждого магазина, который в данном случае является LIDL, EDEKA...

Спасибо

OriginalGriff

Таким образом, магазин-это группа по, выбор-это сумма, а наличие-это месяц.
В чем проблема?

Member 13410460

Ты имеешь в виду вот так ?
Выбрать сумма(цена), а "всего" описание как "описание", сумма (конвертации(ИНТ конвертировать(тип varchar(Макс),количество))) как Ноа, магазин как магазин ',
Преобразовать(char(7), Date, 120) в 'месяц',
Datepart(день,дата) как "День"
От [dbo].[ShareCost]
где CONVERT(char(7), Date, 120) ='2020-08' -- @DateD
Группировка по магазинам
Имея CONVERT(char(7), Date, 120)
Заказ по сумме(цена) описание

OriginalGriff

Нет, я имею в виду *сначала сделайте группу самостоятельно*
Когда это даст основные результаты, которые вам нужны, добавьте остальные через соединение.

Группа BY должна возвращать только два элемента: Stroe и SUM.

Попробовать это. Это совсем не сложно!

Member 13410460

Выбрать магазин как "магазин", сумма (конвертации(ИНТ конвертировать(тип varchar(Макс),количество))) как Ноа,сумма(цена) как "Итого"
От [dbo].[ShareCost]
где CONVERT(char(7), Date, 120) = '2020-08'
Группировка по магазинам
Заказ по сумме(цена) описание


Я использовал это, и это сработало, спасибо, приятель

OriginalGriff

Всегда пожалуйста!