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

Откуда:
Сообщений: 54
Добрый день.
Есть таблица вида
Вид	            Модель	Количество
Компьютер	      a1	21
Компьютер	      a2	53
Компьютер	     a3	48
Принтер	             b1	26
Принтер	             b2	19
Принтер	             b3	45
Принтер	             b4	53
Принтер	             b5	17


при запросе
select top 3 with ties * from table1
order by Row_number() OVER (PARTITION BY вид ORDER BY количество DESC)

выводится только 1 строка - Компьютер и 2 строки - Принтер.

Мне надо по три строки на каждый Вид.

Что делаю не так?
27 окт 17, 12:48    [20906048]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (partition by )  [new]
Добрый Э - Эх
Guest
myrzilka,

неправильно понимаешь логику работы top N with ties.

попробуй так:

select top  1 *
....
order by ceiling(Row_number() OVER (PARTITION BY вид ORDER BY количество DESC)/3.0)
27 окт 17, 12:59    [20906150]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (partition by )  [new]
Добрый Э - Эх
Guest
with ties, конечно же....
Добрый Э - Эх
myrzilka,

неправильно понимаешь логику работы top N with ties.

попробуй так:

select top with ties  1 *
....
order by ceiling(Row_number() OVER (PARTITION BY вид ORDER BY количество DESC)/3.0)
27 окт 17, 12:59    [20906157]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (partition by )  [new]
Владислав Колосов
Member

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

уберите top 3 with ties и посмотрите, что получится.
27 окт 17, 13:00    [20906161]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (partition by )  [new]
myrzilka
Member

Откуда:
Сообщений: 54
Владислав Колосов,
так мне же надо как раз выбрать top 3 + еще остальные, у которых такое же кол-во как у последнего. Только распределить его по Видам. Как же это сделать? with ties не подходит?

select top with ties 1 * - выдает ошибку.
27 окт 17, 14:15    [20906630]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (partition by )  [new]
myrzilka
Member

Откуда:
Сообщений: 54
Добрый Э - Эх, Спасибо! Получилось! Думаю, это то, что нужно.
27 окт 17, 14:19    [20906657]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (partition by )  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
вроде как это вчерашние яблоки и груши,
только сегодня без суммы.
может, все же такое надо?
declare @t table (prod varchar(100), mod varchar(100), qty int);
insert into @t values
('computer',	      'a1',	21),
('computer',	      'a2',	53),
('computer',	     'a3',	48),
('printer',             'b1',	26),
('printer',             'b2',	19),
('printer',             'b3',	45),
('printer',             'b4',	53),
('printer',             'b5',	17);

with cte as 
(
select distinct prod 
from @t
)

select a.*
from cte c cross apply (select top 3 with ties *
                      from @t t
					  where t.prod = c.prod 
					  order by qty desc)a;
---
prod	mod	qty
computer	a2	53
computer	a3	48
computer	a1	21
printer	b4	53
printer	b3	45
printer	b1	26
27 окт 17, 14:27    [20906717]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом (partition by )  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7407
myrzilka
Владислав Колосов,
так мне же надо как раз выбрать top 3 + еще остальные, у которых такое же кол-во как у последнего. Только распределить его по Видам. Как же это сделать? with ties не подходит?

select top with ties 1 * - выдает ошибку.


Я же и пишет - смотрите, что при Вашей сортировке попадает в первые три записи. Никаких чудес нет - что выбрали, то и получили.
27 окт 17, 16:50    [20907404]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить