Попытка реализовать некоторый код, где я создаю два столбца, которые отмечают конец условия. Я начну с кода:
CREATE TABLE #SampleT (ID INT, SomeVal VARCHAR (10))
INSERT INTO #SampleT VALUES (10, 'X')
INSERT INTO #SampleT VALUES (20, 'X')
INSERT INTO #SampleT VALUES (30, 'X')
INSERT INTO #SampleT VALUES (40, 'Y')
INSERT INTO #SampleT VALUES (50, 'Y')
INSERT INTO #SampleT VALUES (60, 'Y')
INSERT INTO #SampleT VALUES (70, 'W')
INSERT INTO #SampleT VALUES (80, 'W')
INSERT INTO #SampleT VALUES (90, 'W')
INSERT INTO #SampleT VALUES (100, 'Z')
INSERT INTO #SampleT VALUES (110, 'Z')
INSERT INTO #SampleT VALUES (120, 'Z')
WITH CTE AS
(
SELECT ID,
SomeVal,
ROW_NUMBER() OVER (ORDER BY SomeVal) AS RowNumb
FROM #SampleT AS S
)
SELECT C.*,
CASE WHEN C.SomeVal <> C2.SomeVal THEN '**' ELSE '' END AS EndMarking,
(C.RowNumb / 11) + 1 AS SecondEndMarking
FROM CTE AS C
LEFT JOIN CTE AS C2 ON C.RowNumb = C2.RowNumb - 1
ORDER BY C.RowNumb
DROP TABLE #SampleT
По сути, этот код работает нормально. Но я хочу, чтобы вторая конечная маркировка начиналась с предыдущей конечной маркировки столбца Endmarking. В этом примере я хотел бы, чтобы столбец SecondEndMarking изменился с 1 на 2 в строке 9, потому что тогда предыдущая маркировка была заполнена **.
Желаемый результат:
ID SomeVal RowNumb EndMarking SecondEndMarking
70 W 1 1
80 W 2 1
90 W 3 ** 1
10 X 4 1
20 X 5 1
30 X 6 ** 1
40 Y 7 1
50 Y 8 1
60 Y 9 ** 2
100 Z 10 2
110 Z 11 2
120 Z 12 2
Это может показаться немного расплывчатым, но с указанным примером кода и желаемым выводом, я надеюсь, кто-то может мне помочь!
Спасибо.