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

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

Дана таблица

id data
-----------------
a 11
a 1
b 32
b 3
b 3
c 4
c 8
c 56
c 9

Нужно вывести таблицу, чтобы у меня каждого id было одинаковое количество штук. Какие именно строки выводит - произвольно.

Например, если 2, то

a 11
a 1
b 32
b 3
c 4
c 8
24 окт 12, 15:16    [13369110]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
Добрый Э - Эх
Guest
select * from (select t.*,
                    row_number() over(partition by id order by data) as rn
                      from t
                 )v
where rn <= :n
24 окт 12, 15:21    [13369145]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
DECLARE @N INT=2;
SELECT TOP(1) WITH TIES *
FROM T
ORDER BY ROW_NUMBER()OVER(PARTITION BY id ORDER BY data)/(@N+1);
24 окт 12, 15:25    [13369182]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
TTT6
Member

Откуда:
Сообщений: 6
Спасибо!

Первый вариант сработал!
Сейчас попробую второй.
24 окт 12, 15:30    [13369222]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
TTT6
Member

Откуда:
Сообщений: 6
А можно делать тоже самое, только без сортировки, т.е. произвольные значения или обязательно по какому то столбцу сортировку производить?
24 окт 12, 15:33    [13369255]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
Добрый Э - Эх
Guest
TTT6,

сортировка требуется синтаксисом функции row_number. но может подставить туда константу (order by 1), чтобы избежать реальной сортировки данных
24 окт 12, 15:36    [13369277]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
TTT6
Member

Откуда:
Сообщений: 6
Добрый Э - Эх
TTT6,

сортировка требуется синтаксисом функции row_number. но может подставить туда константу (order by 1), чтобы избежать реальной сортировки данных


Спасибо!
24 окт 12, 15:38    [13369293]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
Добрый Э - Эх
Guest
Добрый Э - Эх
TTT6,

сортировка требуется синтаксисом функции row_number. но может подставить туда константу (order by 1), чтобы избежать реальной сортировки данных
хотя нет. здесь вам не тут. тут такое не прокатывает...(с ораклом попутал, если что)
24 окт 12, 15:38    [13369299]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
зомби зомби зомби
Member

Откуда: из Жужеля!
Сообщений: 7437
Добрый Э - Эх
TTT6,

сортировка требуется синтаксисом функции row_number. но может подставить туда константу (order by 1), чтобы избежать реальной сортировки данных
order by 1 будет сортировать по первому столбцу в выборке
ставьте order by newid()
24 окт 12, 15:39    [13369311]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
Ivan Durak
Member

Откуда: Minsk!!!
Сообщений: 3752
вообще без сортировки не выйдет
24 окт 12, 15:43    [13369347]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
TTT6
Member

Откуда:
Сообщений: 6
order by 1 выводит ошибку

Windowed functions do not support integer indices as ORDER BY clause expressions.
24 окт 12, 15:47    [13369378]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
TTT6,

ROW_NUMBER() OVER (ORDER BY (SELECT 1)) cn
24 окт 12, 15:49    [13369393]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
TTT6
Member

Откуда:
Сообщений: 6
Да, так работает!
24 окт 12, 15:52    [13369433]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
trew
TTT6,

ROW_NUMBER() OVER (ORDER BY (SELECT 1)) cn
В данном-то случае можно просто продублировать в ORDER BY то же самое, что и в PARTITION BY
24 окт 12, 15:55    [13369460]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
trew
Member

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

Так это уже будет сортировка по столбу, а не произвольная :)
24 окт 12, 16:12    [13369635]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
iap
Member

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

Так это уже будет сортировка по столбу, а не произвольная :)
Если поля в PARTITION BY, то внутри окна они имеют одни и те же значения.
Какая же сортировка в таких условиях?
24 окт 12, 16:15    [13369658]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
trew
Member

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

Так ?
SELECT 
ROW_NUMBER() OVER (PARTITION BY [поле] ORDER BY [поле] ) cn ,
    *
FROM [таблица]

Так получаестя 1 во всех полях.
24 окт 12, 16:27    [13369787]     Ответить | Цитировать Сообщить модератору
 Re: Группировка и подзапрос  [new]
iap
Member

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

Так ?
SELECT 
ROW_NUMBER() OVER (PARTITION BY [поле] ORDER BY [поле] ) cn ,
    *
FROM [таблица]

Так получаестя 1 во всех полях.
Если [поле] уникально, то да, конечно.
24 окт 12, 16:57    [13370029]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить