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

Откуда: Донецк ⇒ Киев
Сообщений: 8
Есть таблица
create table #tmp (id int identity(1,1), string_data nvarchar(10), group_value int)
insert into #tmp (string_data, group_value) values ('val1', 1), ('val1', 1),('val1', 2),('val1', 2),('val1', 2),('val1', 3),('val1', 3),('val1', 3),('val1', 3),('val1', 3)


Нужно отсортировать данные в таблице так, чтобы данные последовательно повторялись group_value (1, 2, 3) ... (1, 2, 3), после того как какие-то значения group_value заканчиваются - продолжалось (2, 3) ... (2, 3) .... (3). Т.е. таблица должна принять такой вид:
idstring_data group_value
1 val1 1
3 val1 2
6 val1 3
2 val1 1
4 val1 2
7 val1 3
5 val1 2
8 val1 3
9 val1 3
10 val1 3

Чувствую, это должно быть просто, но что-то решение в голову не приходит.
Дайте ключевых слов )
12 апр 17, 15:45    [20394706]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37143
declare @tmp table (id int identity(1,1), string_data nvarchar(10), group_value int)
insert into @tmp (string_data, group_value) values ('val1', 1), ('val1', 1),('val1', 2),('val1', 2),('val1', 2),('val1', 3),('val1', 3),('val1', 3),('val1', 3),('val1', 3)

; with a as ( 
    select 
        *
        , rn = row_number () over ( partition by a.string_data, a.group_value order by a.id )
    from @tmp a
)
select
    *
from    a
order by
    a.rn
    , a.id
12 апр 17, 15:50    [20394747]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
iap
Member

Откуда: Москва
Сообщений: 47049
SELECT id,string_data,group_value
FROM #tmp
ORDER BY ROW_NUMBER()OVER(PARTITION BY group_value ORDER BY id),id;
12 апр 17, 15:52    [20394758]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
iap
Member

Откуда: Москва
Сообщений: 47049
SELECT id,string_data,group_value
FROM #tmp
ORDER BY ROW_NUMBER()OVER(PARTITION BY group_value ORDER BY id),id;
12 апр 17, 15:52    [20394759]     Ответить | Цитировать Сообщить модератору
 Re: Сортировка  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
случайное решение :)

SELECT 
	Id,
	string_data,
	group_value,
	[x] = COUNT(group_value) OVER (ORDER BY group_value)-id
FROM #Tmp
ORDER BY [x],[group_value]
12 апр 17, 15:53    [20394762]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить