powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Двойная группировка запроса
18 сообщений из 18, страница 1 из 1
Двойная группировка запроса
    #39852627
Egor111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Есть таблица :
Код Наим К-во ∑ Пост Маг
1 Товар 1 4 1111 Поставщик 1 MSK
2 Товар 2 3 222 Поставщик 1 MSK
3 Товар 3 18 333 Поставщик 1 MSK
4 Товар 4 20 2222 Поставщик 2 MSK
4 Товар 4 4 4111 Поставщик 1 MSK
5 Товар 5 15 6000 Поставщик 1 MSK
1 Товар 1 4 7889 Поставщик 1 SPB
2 Товар 2 13 9778 Поставщик 1 SPB
3 Товар 3 18 11667 Поставщик 1 SPB
4 Товар 4 120 13556 Поставщик 2 SPB
4 Товар 4 14 15445 Поставщик 1 SPB

Не могу победить отображение партионности товара.
Когда делаю группировку по Коду, ругается на колонку Пост (из-за того что один товар могут возить разные поставщики)
Подскажите как сделать группировку так, чтобы Код товара по каждому магазину не был задвоен ?( суммировался остаток по сумме и к-ву, а поставщик записывался через запятую или первый который привез товар)
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39852630
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
max([Пост]) as [Поставщик]



если нужны все поставщики , то ищите про string_agg()
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39852640
Egor111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, поищу

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT code as "Код" ,
otd AS "Отдел", g_n as "Наим", 
amount as "Сумма", qty as "Количество", market as "Маг"
FROM 
Trade1
WHERE 
DAY(date_end) = (DAY(GETDATE())-1) 
AND otd ='Бакалея'
AND market='MSK'
GROUP BY code



Запрос ругается не только на поставщика, но и на все остальные колонки.
Я так понимаю, все оборачивать в MAX ([dep]) сразу после селекта?
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39852665
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или CTE, ищите по форуму
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39852845
Egor111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не помогает MAX() , прописывал Group BY - без ошибки, но та же выборка где берется количество только по одному поставщику.
Форум перечитал, опробовал EXISTS но толку 0 - не могу понять как втулить проверку наличия на одном маркете одного товара от разных поставщиков. А точнее не понимаю как вывод использовать.
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39852849
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделайте нормальные скрипты заполнения таблицы и какой результат вы хотите получить
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39852852
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egor111Я так понимаю, все оборачивать в MAX ([dep]) сразу после селекта?А смысл какой? Нафига выводить "какое-нибудь" значение из группы? Уберите вообще поля, которые варьируют в группе, из списка вывода. А те, которые строго соответствуют коду (скажем, наименование), добавьте в выражения группировки.

И зачем вообще группировка, если нет ни одной агрегатной функции?

Egor111отображение партионности товара
А это что вообще такое - партионность? в текущем понимании...
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39852886
Egor111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хочу получить список товаров у которых общий остаток на каждом магазине меньше 5 штук
Желаемый вывод:
Код | Наим | К-во | Сумма | Поставщики(хоть как-то) | Магазин

Партионность - имеется ввиду по товару - одна партия от одного поставщика вторая от другого, а товар один и тот же
Поставщика выбросить не могу - придется грузить и обрабатывать отчеты в Экселе минут 40, а тогда пропадает вообще смысл выгрузки через SQL если придется все руками делать.
Вариантов кода за два дня немеряно, вот один из вариантов без мусора:


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT code as "Код" ,
g_n as "Наим", 
SUM(qty) as "Количество",
SUM(amount) as "Сумма",
Post as "Поставщик"
market as "Маг",
otd AS "Отдел"
FROM 
Trade1
WHERE 
DAY(date_end) = (DAY(GETDATE())-1) 
AND otd ='Бакалея'
AND market='MSK'
AND qty <5.0001
GROUP BY code                 (здесь хоть что добавляй, все равно в выгрузке будет  Товар 4 по Поставщику 1 в МСК, хотя общий остаток 24 штуки)
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39852887
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделайте тестовую данные + желаемый результат данных, чтобы вам могли помочь, а то ваши объяснения очень туманны
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39852902
Egor111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приложил файл, думаю должно стать понятно
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39852911
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы не поняли, пррочитайте тему как надо формлять сообщения в форуме.

нужно что-то типа такого:

Код: sql
1.
2.
declare @t table(id int, ...)
insert into @t(id...) values(1,...),(2, ....);
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39852916
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egor111Приложил файл, думаю должно стать понятно
у вас ошибка в примере, куда строка делась?
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39852922
Фотография Focha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для пользователей

Код: 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.
drop table #d
select *
into #d
from (
			select 1 as code	,'Сахар' as g_n	,4 as qty	,40	as amount	,'Веселка' as Post	,'MSK' as market	,'Бакалея' as otd	,convert(datetime,'20190822') as date_end union all
			select 2			,'Мука'			,3			,60				,'Веселка'			,'MSK'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 3			,'Тосол'		,19			,570			,'Веселка'			,'MSK'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 4			,'Соль'			,2			,80				,'Веселка'			,'MSK'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 4			,'Соль'			,1			,50				,'Моркин'			,'MSK'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 5			,'Гречка'		,19			,1140			,'Веселка'			,'MSK'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 6			,'Горох'		,22			,1540			,'Веселка'			,'MSK'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 7			,'Банка 3 л'	,44			,3520			,'Веселка'			,'MSK'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 8			,'Банка 5 л'	,8			,720			,'Веселка'			,'MSK'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 25136		,'Половник'		,15			,1500			,'Веселка'			,'MSK'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 12468		,'Ложка'		,28			,3080			,'Веселка'			,'MSK'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 1			,'Сахар'		,22			,220			,'Веселка'			,'SPB'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 2			,'Мука'			,18			,360			,'Веселка'			,'SPB'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 3			,'Тосол'		,216		,6480			,'Веселка'			,'SPB'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 4			,'Соль'			,131		,5240			,'Веселка'			,'SPB'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 4			,'Соль'			,1			,50				,'Моркин'			,'SPB'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 5			,'Гречка'		,64			,3840			,'Веселка'			,'SPB'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 6			,'Горох'		,12			,840			,'Веселка'			,'SPB'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 7			,'Банк 3 л'		,16			,1280			,'Веселка'			,'SPB'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 8			,'Банка 5 л'	,1			,90				,'Веселка'			,'SPB'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 25136		,'Половник'		,16			,1600			,'Веселка'			,'SPB'				,'Бакалея'			,convert(datetime,'20190822') as date_end union all
			select 12468		,'Ложка'		,16			,1760			,'Веселка'			,'SPB'				,'Бакалея'			,convert(datetime,'20190822') as date_end
	) as t																				

...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39852930
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egor111а поставщик записывался через запятую или первый который привез товар)

Если я правильно понял вы хотите вытащить

Код: plaintext
1.
2.
3.
4.
5.
(1 Товар 1 4 1111 Поставщик 1 MSK) + (1 Товар 1 4 7889 Поставщик 1 SPB)
(2 Товар 2 3 222 Поставщик 1 MSK) + (2 Товар 2 13 9778 Поставщик 1 SPB)
(3 Товар 3 18 333 Поставщик 1 MSK) + (3 Товар 3 18 11667 Поставщик 1 SPB)
(4 Товар 4 20 2222 Поставщик 2 MSK) + (4 Товар 4 4 4111 Поставщик 1 MSK) + (4 Товар 4 120 13556 Поставщик 2 SPB) + (4 Товар 4 14 15445 Поставщик 1 SPB)
(5 Товар 5 15 6000 Поставщик 1 MSK)

это уже не группировка, а джойн. Не получите вы поставщика(ов) без джойна.
Но вы можете сгруппировать без поставщика по товару, да.
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39853084
Egor111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
я бы составил запрос на создание таблицы - исходника как написано в правилах, но боюсь тема перейдет из русла о том как я неправильно создаю тему в обсуждение неправильного запроса создания :)

Focha,
Какая строка? Ошибок вроди нет в таблице-примере.

PizzaPizza,
Спасибо, попробую погуглить как сюда join втулить.
Не совсем - я хочу получить список товаров у которых общий остаток каждой единицы товара на каждом магазине меньше 5 штук.
(4 Соль возит в СПБ два поставщика, выборка показывает "4 Соль 131 5240 Веселка SPB Бакалея 22.авг" хотя общее количество Соли на магазине 132 шт.)
При группировке не срабатывает условие на сумму.
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39853815
Egor111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спустя пару рабочих дней, для тех, кто ищет решение, а не советы по созданию тем, или комментарии по исходникам :) :

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
SELECT code as "Код" ,
g_n as "Наим", 
SUM(qty) as "Количество",
SUM(amount) as "Сумма",
MAX(Post) as "Поставщик"
market as "Маг",
otd AS "Отдел"
FROM 
Trade1
WHERE 
DAY(date_end) = (DAY(GETDATE())-1) 
AND otd ='Бакалея'
AND market='MSK'
GROUP BY code
HAVING SUM(qty) BETWEEN 0.0001 AND 5.0001 



Просто надо было добавить "HAVING" + "SUM"
Еще может быть полезна функция GROUP_CONCAT если версия сервера позволит : " SELECT code as "Код" ,
g_n as "Наим",
SUM(qty) as "Количество",
SUM(amount) as "Сумма",
GROUP_CONCAT (Post , ', ') as "Поставщик" "

Если не работает GROUP_CONCAT то можно взять :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT code as "Код" ,
g_n as "Наим", 
SUM(qty) as "Количество",
SUM(amount) as "Сумма",
STUFF(
             (
SELECT distinct ', ' + t2.Post       FROM Trade1 t2
              where t1.code = t2.code AND DAY(date_end) = (DAY(GETDATE())-1)
              FOR XML PATH ('') )      , 1, 1, '')  AS "Поставщик" ,
market as "Маг",
otd AS "Отдел"

FROM 
Trade1 t1
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39853836
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egor111 поставщик записывался через запятую или первый который привез товар)
Ну вы же понимаете, что это ваше условие не работает, если вы пишете
Код: sql
1.
MAX(Post) as "Поставщик"


это не через запятую и не первый, это случайный.

А по поводу
Код: sql
1.
BETWEEN 0.0001 AND 5.0001 


У вас поставщики присылают товар с размерностью десятитысячных (35.0854 банок варенья) или вы просто скопировали откуда то не подумав?
...
Рейтинг: 0 / 0
Двойная группировка запроса
    #39853840
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egor111Еще может быть полезна функция GROUP_CONCAT

Нет такой функции в этом сервере.

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


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