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

Откуда:
Сообщений: 4
Помогите с запросом ниже, для примера. К сожалению сиквел знаю плохо.
Собственно требуется вывести поле warranty.


declare @t table(
	id int identity not null, 
	category varchar(10), 
	subcategory varchar(10), 
	name varchar(10), 
	amount money,
	warranty int)

insert into @t
values 
	('смартфон', 'samsung', 'A3', 50, 12), ('смартфон', 'samsung', 'A5', 100, 12), ('смартфон', 'samsung', 'A7', 200, 12),
	('смартфон', 'sony', '1', 150, 24), ('смартфон', 'sony', '10', 100, 24),
	('планшет', 'samsung', '9.8', 150, 12), ('планшет', 'samsung', '8.0', 120, 12),
	('планшет', 'xiaomi', '9.8', 100, 24), ('планшет', 'xiaomi', '8.2', 70, 24)

select t.category, t.subcategory, t.name, sum(amount) as sum
from @t t
group by 
	t.category, t.subcategory, t.name WITH ROLLUP
order by
	GROUPING(t.category) DESC, t.category, GROUPING(t.subcategory) DESC, t.subcategory, GROUPING(t.name) DESC, t.name
7 апр 19, 20:22    [21855259]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом, вывести поле не включая в group by with rollup  [new]
aleks222
Member

Откуда:
Сообщений: 541
Собственно выбор невелик

1. Включить, таки, в group by
2. Использовать мах или min, понимая последствия.
8 апр 19, 05:57    [21855384]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом, вывести поле не включая в group by with rollup  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2369
Блог
Oleg_234,

У вас нарушена 2НФ, архитектора гнать. Если это учебный пример, то, как правильно сказано, либо включать в group by, либо применять max|min|avg
8 апр 19, 06:43    [21855389]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом, вывести поле не включая в group by with rollup  [new]
Oleg_234
Member

Откуда:
Сообщений: 4
Спасибо за ответы. Как оказалось не совсем удачный пример, поле которое нужно вывести это строка, так что max|min|avg не подходят наверное.
8 апр 19, 10:29    [21855530]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом, вывести поле не включая в group by with rollup  [new]
uaggster
Member

Откуда:
Сообщений: 554
Oleg_234
Спасибо за ответы. Как оказалось не совсем удачный пример, поле которое нужно вывести это строка, так что max|min|avg не подходят наверное.

Почему?
avg - не работает, а min и max - вполне.
Строки - не числовые, но сравнимые объекты.
8 апр 19, 12:36    [21855753]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом, вывести поле не включая в group by with rollup  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 3878
Павел Воронцов,

А что 2НФ это божественная архитектура, от которой нельзя отклоняться?

В данном случае рекомендую посмотреть GROUP BY GROUPING SETS и оконные функции (OVER PARTITIOB BY). С LAST_VALUE и FIRST_VALUE всегда можно выкрутиться.

SET LANGUAGE Russian

declare @t table(
	id int identity not null, 
	category nvarchar(10), 
	subcategory varchar(10), 
	name varchar(10), 
	amount money,
	warranty int)

insert into @t
values 
	(N'смартфон', 'samsung', 'A3', 50, 12), (N'смартфон', 'samsung', 'A5', 100, 12), (N'смартфон', 'samsung', 'A7', 200, 12),
	(N'смартфон', 'sony', '1', 150, 24), (N'смартфон', 'sony', '10', 100, 24),
	(N'планшет', 'samsung', '9.8', 150, 12), (N'планшет', 'samsung', '8.0', 120, 12),
	(N'планшет', 'xiaomi', '9.8', 100, 24), (N'планшет', 'xiaomi', '8.2', 70, 24)

select t.category, t.subcategory, t.name, sum(amount) as sum
from @t t
group by grouping sets 
	((t.category, t.subcategory), (t.category, t.subcategory, t.name))
order by
	t.category, t.subcategory, t.name
8 апр 19, 13:09    [21855808]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом, вывести поле не включая в group by with rollup  [new]
Павел Воронцов
Member

Откуда: Новосибирск
Сообщений: 2369
Блог
a_voronin,

А зачем выкручиваться если можно сразу сделать по уму? НФ не "божественная архитектура", а применение логики к архитектуре бд. Если Вам нравится не уменьшать, а увеличивать количество бардака и нелогичности, то не применяйте.
9 апр 19, 07:00    [21856645]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить