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

Откуда:
Сообщений: 119
Вот такая таблица:


UserName Department Traffic
---------------------------------


Нужно сделать запрос, к-рый вернет TOP 20 UserName в каждом Department. Сортировка внутри по Traffic. Как такое сделать кратчайшим способом?
11 июл 11, 11:14    [10954440]     Ответить | Цитировать Сообщить модератору
 Re: помогите нарисовать запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
WITH CTE AS(SELECT *, ROW_NUMBER()OVER(PARTITION BY Department ORDER BY Traffic) N FROM [Вот такая таблица])
SELECT * FROM CTE WHERE N<=20;
11 июл 11, 11:26    [10954546]     Ответить | Цитировать Сообщить модератору
 Re: помогите нарисовать запрос  [new]
Landwarrior
Member

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

А без CTE можно как-то обойтись?
11 июл 11, 11:38    [10954648]     Ответить | Цитировать Сообщить модератору
 Re: помогите нарисовать запрос  [new]
Andrey Sribnyak
Member

Откуда: Киев
Сообщений: 600
cross apply
11 июл 11, 11:39    [10954659]     Ответить | Цитировать Сообщить модератору
 Re: помогите нарисовать запрос  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
select @@version
11 июл 11, 11:45    [10954694]     Ответить | Цитировать Сообщить модератору
 Re: помогите нарисовать запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Landwarrior
iap,

А без CTE можно как-то обойтись?
Почему?
SELECT *
FROM [Вот такая таблица]
ORDER BY ROW_NUMBER()OVER(PARTITION BY Department ORDER BY Traffic)/21;
Но это хуже по эффективности.
Если раздражает сама аббревиатура "CTE", то
SELECT *
FROM (SELECT *, ROW_NUMBER()OVER(PARTITION BY Department ORDER BY Traffic) N FROM [Вот такая таблица]) CTE
WHERE N<=20;
но это то же самое.
11 июл 11, 11:46    [10954706]     Ответить | Цитировать Сообщить модератору
 Re: помогите нарисовать запрос  [new]
qwerty112
Guest
Landwarrior
iap,

А без CTE можно как-то обойтись?

select * from T t1
where (select count(*) from T t2 where t1.Department=t2.Department and t2.Traffic>t1.Traffic)<20
11 июл 11, 11:51    [10954760]     Ответить | Цитировать Сообщить модератору
 Re: помогите нарисовать запрос  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
ms sql server 2000
select UserName, Departament
from (select t1.UserName, t1.Departament, (select COUNT(*) from [Table] t2 where t2.Department = t1.Department and t2.Traffic <= t1.Traffic) as rowNum
from [Table] t1) t
where t.rowNum <= 20
11 июл 11, 11:51    [10954762]     Ответить | Цитировать Сообщить модератору
 Re: помогите нарисовать запрос  [new]
Landwarrior
Member

Откуда:
Сообщений: 119
Andrey Sribnyak,

Я имел в виду в рамках синтаксиса SQL 2000. У клиента стоит legacy system и для начала надо изобразить что-то на SQL 2000
11 июл 11, 11:53    [10954780]     Ответить | Цитировать Сообщить модератору
 Re: помогите нарисовать запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
qwerty112
Landwarrior
iap,

А без CTE можно как-то обойтись?

select * from T t1
where (select count(*) from T t2 where t1.Department=t2.Department and t2.Traffic>t1.Traffic)<20
Это если Traffic уникально
11 июл 11, 11:53    [10954781]     Ответить | Цитировать Сообщить модератору
 Re: помогите нарисовать запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Landwarrior
Andrey Sribnyak,

Я имел в виду в рамках синтаксиса SQL 2000. У клиента стоит legacy system и для начала надо изобразить что-то на SQL 2000
А почему это выясняется только на 40-й минуте?
11 июл 11, 11:54    [10954789]     Ответить | Цитировать Сообщить модератору
 Re: помогите нарисовать запрос  [new]
Landwarrior
Member

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

А если Traffic не уникально?
11 июл 11, 12:26    [10954988]     Ответить | Цитировать Сообщить модератору
 Re: помогите нарисовать запрос  [new]
qwerty112
Guest
Landwarrior
iap,

А если Traffic не уникально?

тогда вас уволят, с формулировкой "мало того, что сам нихера не знает, так ещё и спросить - не умеет..." :)
11 июл 11, 13:03    [10955212]     Ответить | Цитировать Сообщить модератору
 Re: помогите нарисовать запрос  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
приудмать уникальнкую колонку как сказано Коддом про 3НФ
11 июл 11, 13:08    [10955242]     Ответить | Цитировать Сообщить модератору
 Re: помогите нарисовать запрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Landwarrior
iap,

А если Traffic не уникально?
Тогда может вернenmcz не точно 20 строк
11 июл 11, 13:55    [10955553]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить