Если я правильно понимаю вопрос, следующее утверждение является возможным решением.
Таблицы:
CREATE TABLE QAT_ListElid (
ListElid nvarchar(250),
ListType nvarchar(250),
orderArray int,
LeftTSMKEY nvarchar(250)
)
INSERT INTO QAT_ListElid
(ListElid, ListType, orderArray, LeftTSMKEY)
VALUES
('1000:odl5:7pt_ToxAcuDo[0]', '1000:odl5:7pt_ToxAcuDo', 0, 'ToxAcuDo['),
('106i:odl5:7pt_ToxAcuDo[0]', '106i:odl5:7pt_ToxAcuDo', 0, 'ToxAcuDo['),
('107:107:7pt_NIL[0]', '107:107:7pt_NIL', 0, 'NIL['),
('107:1827:7pt_NIL[0]', '107:1827:7pt_NIL', 0, 'NIL['), -- 107:1827:7pt_NIL
('107:1827:7pt_NIL[1]', '107:1827:7pt_NIL', 1, 'NIL['), -- 107:1827:7pt_NIL
('107:1827:7pt_NIL[3]', '107:1827:7pt_NIL', 3, 'NIL['), -- 107:1827:7pt_NIL
('107:1hqn:7pt_NIL[0]', '107:1hqn:7pt_NIL', 0, 'NIL['),
('107:1hqn:7pt_NIL[1]', '107:1hqn:7pt_NIL', 1, 'NIL['),
('107:1rj7:7pt_NIL[0]', '107:1rj7:7pt_NIL', 0, 'NIL['),
('107:1rj7:7pt_NIL[1]', '107:1rj7:7pt_NIL', 1, 'NIL['),
('107:1rsg:7pt_NIL[0]', '107:1rsg:7pt_NIL', 0, 'NIL['),
('107:1s2r:7pt_NIL[0]', '107:1s2r:7pt_NIL', 0, 'NIL['), -- 107:1s2r:7pt_NIL
('107:1s2r:7pt_NIL[1]', '107:1s2r:7pt_NIL', 1, 'NIL['), -- 107:1s2r:7pt_NIL
('107:1s2r:7pt_NIL[2]', '107:1s2r:7pt_NIL', 2, 'NIL['), -- 107:1s2r:7pt_NIL
('107:1s2r:7pt_NIL[4]', '107:1s2r:7pt_NIL', 4, 'NIL['), -- 107:1s2r:7pt_NIL
('107:1vf:7pt_ NIL[0]', '107:1vf:7pt_NIL', 0, 'NIL[')
CREATE TABLE QAT_ListElid2 (
ListElid nvarchar(250),
ListType nvarchar(250),
orderArray int,
LeftTSMKEY nvarchar(250)
)
Заявление:
;WITH ChangesCTE AS (
SELECT
ListElid, ListType, orderArray, LeftTSMKEY,
CASE
WHEN ListType = LAG(ListType) OVER (PARTITION BY ListType ORDER BY orderArray) THEN 1
ELSE 0
END AS [Change]
FROM QAT_ListElid
), FinalCTE AS (
SELECT
ListElid, ListType, orderArray, LeftTSMKEY,
SUM([Change]) OVER (PARTITION BY ListType ORDER BY ListType, orderArray) AS [inc]
FROM ChangesCTE
)
INSERT INTO QAT_ListElid2
([ListElid], [ListType], [orderArray], [LeftTSMKEY])
SELECT
ListElid,
ListType,
[inc] AS orderArray,
LeftTSMKEY + CAST([inc] as nvarchar(10)) + ']' AS LeftTSMKEY
FROM FinalCTE
WHERE orderArray <> [inc]
или другое утверждение как второй вариант:
INSERT INTO QAT_ListElid2
([ListElid], [ListType], [orderArray], [LeftTSMKEY])
SELECT
ListElid,
ListType,
[inc] AS orderArray,
LeftTSMKEY + CAST([inc] as nvarchar(10)) + ']' AS LeftTSMKEY
FROM (
SELECT
ListElid, ListType, orderArray, LeftTSMKEY,
ROW_NUMBER() OVER (PARTITION BY ListType ORDER BY orderArray) - 1 AS [Inc]
FROM QAT_ListElid
) t
WHERE orderArray <> [inc]
Результат (две вставленные строки):
--------------------------------------------------------------
ListElid ListType orderArray LeftTSMKEY
--------------------------------------------------------------
107:1827:7pt_NIL[3] 107:1827:7pt_NIL 2 NIL[2]
107:1s2r:7pt_NIL[4] 107:1s2r:7pt_NIL 3 NIL[3]