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

Откуда: Москва
Сообщений: 598
DECLARE @T TABLE (id int,[Name] VARCHAR(50))
INSERT INTO @T 
SELECT 1, 'AA'
UNION ALL 
SELECT 2,'BB'
UNION ALL 
SELECT 2,'CC'
UNION ALL 
SELECT 2,'BBD'
UNION ALL 
SELECT 2,'dfdf'
UNION ALL 
SELECT 2,'aaaz'
UNION ALL 
SELECT 2,'mgdf'
UNION ALL 
SELECT 2,'ytrr'
UNION ALL 
SELECT 3,'dcvxc'
UNION ALL 
SELECT 3,'bhhjg'
UNION ALL
SELECT 3, 'AA2'
UNION ALL 
SELECT 3,'BB2'
UNION ALL 
SELECT 3,'CC2'
UNION ALL 
SELECT 3,'BBD2'
UNION ALL 
SELECT 3,'dfdf2'
UNION ALL 
SELECT 3,'aaaz2'
UNION ALL 
SELECT 3,'mgdf2'
UNION ALL 
SELECT 3,'ytrr2'
UNION ALL 
SELECT 3,'dcvxc2'
UNION ALL 
SELECT 3,'bhhjg2'
UNION ALL 
SELECT 3,'bhhjg3'
UNION ALL 
SELECT 3,'bhhjg5'

SELECT * FROM @T


Как отранжировать таким образом, чтобы делил по 6, в рамках одного id, но продолжая нумерацию? Как правильно организовать dense_rank ?



rangid Name
11 AA
22 BB
22 CC
22 BBD
22 dfdf
22 aaaz
22 mgdf
32 ytrr
43 dcvxc
43 bhhjg
43 AA2
43 BB2
43 CC2
43 BBD2
53 dfdf2
53 aaaz2
53 mgdf2
53 ytrr2
53 dcvxc2
53 bhhjg2
63 bhhjg3
63 bhhjg5
9 окт 18, 17:49    [21699557]     Ответить | Цитировать Сообщить модератору
 Re: Как отранжировать в виде  [new]
Ennor Tiegael
Member

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

Может вам не DENSE_RANK, а NTILE нужен?
9 окт 18, 17:51    [21699560]     Ответить | Цитировать Сообщить модератору
 Re: Как отранжировать в виде  [new]
minya13_85
Member

Откуда: Москва
Сообщений: 598
Ennor Tiegael
minya13_85,

Может вам не DENSE_RANK, а NTILE нужен?


NTILE надо задать аргумент в скобках, но я не знаю сколько.
9 окт 18, 17:55    [21699565]     Ответить | Цитировать Сообщить модератору
 Re: Как отранжировать в виде  [new]
court
Member

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

В "два этажа" получается, но в оптимальности не уверен
;with cte as (
	SELECT 
		* 
		,fl =row_number()over(order by id)-row_number()over(partition by id order by id)   
	FROM @T),
cte1 as (
	select
		*
		,r=(row_number()over(partition by id, fl order by id, fl)-1) / 6
	from cte)

select 
	 id 
	,[Name] 
	,rang	=dense_rank()over(order by id, r)  
from cte1

idNamerang
1AA1
2BB2
2CC2
2BBD2
2dfdf2
2aaaz2
2mgdf2
2ytrr3
3dcvxc4
3bhhjg4
3AA24
3BB24
3CC24
3BBD24
3dfdf25
3aaaz25
3mgdf25
3ytrr25
3dcvxc25
3bhhjg25
3bhhjg36
3bhhjg56
9 окт 18, 18:08    [21699578]     Ответить | Цитировать Сообщить модератору
 Re: Как отранжировать в виде  [new]
Ennor Tiegael
Member

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

А, все, понял. Зря вы так пример подобрали, что последнее значение ранга совпадает с размером окна - это запутывает.

А практический смысл у задачи есть, или так, мозги размять? А то, может, там еще какие зависимости имеются. Так-то прям в лоб - это очень мудрено будет, если будет, и может даже проигрывать курсору.
9 окт 18, 18:10    [21699581]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить