У меня есть эта дата
DECLARE @tbl table (ID INT, Items VARCHAR(5))
INSERT INTO @tbl VALUES
(1,'A'),(1,'A'),(1,'A'),(1,'B'),(1,'D'),(2,'A'),(2,'A'),(2,'B'),
(2,'B'),(2,'B'),(3,'A'),(3,'A'),(3,'B'),(3,'B'),(3,'C'),(3,'C'),
(3,'C'),(3,'E'),(3,'F')
То, что я хочу, это в ID 1 есть 3 различных элемента A, B и C, все дубликаты, такие как A, ранжируются 1, B и C не имеют дубликатов.Таким образом, ранжированные 2 и 3 соответственно в ID 2 есть 2 различных элемента A и B, A равен 1, и первый следующий элемент B будет равен 1, пока не достигнет последнего значения элемента B, которое будет равно 2, и т. д.
Токовый выход
ID Items RN
1 A 1
1 A 2
1 A 3
1 B 1
1 D 1
2 A 1
2 A 2
2 B 1
2 B 2
2 B 3
3 A 1
3 A 2
3 B 1
3 B 2
3 C 1
3 C 2
3 C 3
3 E 1
3 F 1
Требуемый выход
Мой текущий запрос
SELECT
*
,ROW_NUMBER()OVER(PARTITION BY CAST(ID AS VARCHAR(2))+Items ORDER BY Items DESC) AS RN
FROM @tbl
ORDER BY ID,Items