Мне нужно присвоить номер строки большому набору данных, который имеет уникальный идентификатор, но может совпадать с другими полями. Ниже я привел примеры данных. Номер строки должен увеличиваться, но повторяется для строк, где совпадение isLength и isThickness соответствует последовательному порядку поля идентификатора. Я приложил изображение, которое показывает, чего я пытаюсь достичь.
DECLARE @tempData Table (ID INT Identity(1,1), isLength INT, isThickness nvarchar(6))
INSERT INTO @tempData(isLength, isThickness)
Values(126,'1.375')
,(122,'1.375')
,(120,'1.375')
,(120,'1.375')
,(120,'3')
,(194,'2')
,(242,'2')
,(242,'2')
,(122,'1.375')
,(122,'1.375')
,(108,'1.75')
,(60,'1.75')
,(108,'1.75')
SELECT ID, isLength, isThickness
FROM @tempData t
Order BY ID
Желаемый результат:
Я пробовал использовать Rank, Dense_Rank вместе с Partitioning и Order By... Я думаю, что это может быть многоэтапный процесс для достижения этой цели, но у меня заканчиваются идеи.
И покажи нам свою последнюю попытку.
Что ты получаешь сейчас?
Может ли быть больше двух одинаковых?
Какое правило гласит, что идентификаторы 3 и 4 должны иметь одинаковый номер строки?
@Андрей, я предполагаю, что если предыдущая строка = текущая, то сохраняй тот же вид
«Я пробовал использовать Rank, Dense_Rank вместе с Partitioning и Order By…» Так где же этот запрос???
Это называется пробелами и островами, дополнительная морщина в том, что это два поля.
Возможное решение:
select SUM(counter) OVER(ORDER BY ID ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS CalculatedID
, *
from (
select case
when lag(isLength) over(order by ID) = islength
and lag(isThickness) over(order by ID) = isThickness then 0 else 1
end AS counter
, *
from (
VALUES (1, 126, 1.375, 1)
, (2, 122, 1.375, 2)
, (3, 120, 1.375, 3)
, (4, 120, 1.375, 3)
, (5, 120, 3, 4)
, (6, 194, 2, 5)
, (7, 242, 2, 6)
, (8, 242, 2, 6)
, (9, 122, 1.375, 7)
, (10, 122, 1.375, 7)
, (11, 108, 1.75, 8)
, (12, 60, 1.75, 9)
, (13, 108, 1.75, 10)
) t (ID,isLength,isThickness,[Desired Row Number])
) x
Обычно я действую следующим образом:
Выход:
Спасибо @siggemannen, это помогло! Я подумал, что мне, возможно, придется каким-то образом использовать LAG, и решил, что это может быть многоэтапный процесс.
Пожалуйста, не используйте изображения для данных. Используйте уценку таблицы.