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

Откуда:
Сообщений: 3
Добрый день


Есть следующая задача:
Написать SQL-запрос, возвращающий следующие результаты:
количество уникальных значений поля pos_id по каждому из значений полей color, type, weight, а также по каждому подмножеству значений этих полей.

Исходные данные:
pos_id color type weight
111 желтый апельсин кг
111 красный апельсин г
111 желтый помидор кг
222 желтый помидор г
222 красный помидор г
333 красный помидор г

Требуемые данные:
color type weight cnt_pos_id
желтый апельсин кг 1
красный апельсин г 1
желтый помидор кг 1
желтый помидор г 1
красный помидор г 2
все апельсин кг 1
все апельсин г 1
все помидор кг 1
все помидор г 2
желтый все г 1
желтый все кг 1
красный все г 3
все все г 3
все все кг 1
все все все 3

Выполняю задачу следующим запросом:
select isnull(color,'все'), isnull(type,'все'), isnull(weight,'все'), count(distinct pos_id)
from dbo.cur_data_1
group by cube(color,type, weight)

но появляются лишние значения группировки по весу.
подскажите, как соптимизировать запрос и получить корректные требуемые данные.
P.S. дописать where - ок, но возможно есть более элегантное решение

Всем спасибо, с меня бонус в 200 р на мобильный телефон
13 мар 16, 15:28    [18925393]     Ответить | Цитировать Сообщить модератору
 Re: Задача с подвохом  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
Stakats
но появляются лишние значения группировки по весу.
Что значит "лишние"?
А вообще можете сами задавать необходимые группировки:
select isnull(color,'все'), isnull(type,'все'), isnull(weight,'все'), count(distinct pos_id)
from dbo.cur_data_1
group by grouping sets((color, type, weight), (color, type), (color, weight), (type, weight), (color), (type), (weight), ());
13 мар 16, 16:02    [18925462]     Ответить | Цитировать Сообщить модератору
 Re: Задача с подвохом  [new]
Stakats
Member

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

Спасибо! Помогли!)
13 мар 16, 16:17    [18925489]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить