select distinct a.pattern ,convert(numeric(18,0) ,isnull(b.[DCount]as [DCount]
,DENSE_RANK () OVER ( Partition by a.pattern order by b.[DCount]desc ) as [Rank]
from a, b
Выводит как
Pattern Dcount Rank
A 0 1
A 0 1
A 0 2
A 0 2
B 0 2
B 0 2
B 0 2
B 0 2
C 0 2
C 0 2
C 0 2
В то время как требуемый вывод
Pattern Dcount Rank
A 0 1
A 0 1
A 0 1
A 0 1
B 0 1
B 0 1
B 0 1
B 0 1
C 0 1
C 0 1
C 0 1
Как насчет 1 as rank? Зачем нужна функция?
Будьте уверены, функция RANK работает, как описано в документации, как и функция DENSE_RANK. Однако ваш запрос не анализируется (неправильные скобки для начала), и вы не объясняете свои ожидания. Очень сложно ответить без дополнительной информации.


используйте DENSE_RANK ниже
select * ,DENSE_RANK () OVER ( order by Pattern, Dcount) as rn from t
Возможно, вам просто нужен рейтинг по dcount. Если так:
select distinct a.pattern, convert(numeric(18,0),
coalesce(b.DCount, 0) as DCount,
dense_rank() over (order by b.[DCount] desc) as [Rank]
from a cross join b;
Попробуйте это: вам нужно разделить по Pattern, dcount и заказать только по шаблону
select *,dense_Rank() over(partition by Pattern,dcount order by Pattern) from tablename
Код не работает из-за отсутствия круглых скобок