2
이 테이블 (테스트)를 고려 마지막으로 사용 가능한 행에서 그리고 OtherTable - 즉에서 채워 져야합니다. C1은 같은 값을 가지며 C2는 OtherTable에서 나오고 Data는 같은 값을가집니다.이전 행에서 누락 된 값을 작성하는 방법
C1 C2 Data
----------------
1 101 A1
1 102 A1 -- <<< Filled in from OtherTable & last available row 'A1'
1 103 A1 -- <<< Filled in from OtherTable & last available row 'A1'
1 104 A4
1 105 A5
2 101 B1
2 102 B2
2 103 B3
2 104 B3 -- <<< Filled in from OtherTable & last available row 'B3'
2 105 B5
나는이 내장했습니다
WITH Keys AS
(
SELECT
T.C1,
O.C2
FROM
TEST T
CROSS APPLY (SELECT C2 FROM OtherTable) O
GROUP BY
T.C1,
O.C2
),
MaxMin AS
(
SELECT
C1,
MIN(C2) LowerBound,
MAX(C2) UpperBound
FROM
Test
GROUP BY
C1
)
SELECT
K.C1,
K.C2,
T.Data
FROM
Keys K
LEFT JOIN Test T
ON
T.C1 = K.C1
AND T.C2 = K.C2
INNER JOIN MaxMin M
ON
K.C1 = M.C1
AND K.C2 BETWEEN M.LowerBound AND M.UpperBound
나는 받기까지
C1 C2 Data
----------------
1 101 A1
1 102 NULL
1 103 NULL
1 104 A4
1 105 A5
2 101 B1
2 102 B2
2 103 B3
2 104 NULL
2 105 B5
하지만 데이터 열을 적용하는 방법을 볼 수 없습니다, 나는 또한 재귀 CTE 느낌 위 질의를 줄이기 위해서이지만 어떻게 볼 수는 없습니다.
의 (a CTE 일 필요는 없습니다) 및 OtherTable
에 그 가입
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Test')
DROP TABLE Test;
CREATE TABLE Test (C1 INT, C2 INT, Data NVARCHAR(10));
INSERT INTO Test (C1, C2, Data) VALUES
(1, 101, 'A1'),
--(1, 102, 'A1'),
--(1, 103, 'A1'),
(1, 104, 'A4'),
(1, 105, 'A5'),
(2, 101, 'B1'),
(2, 102, 'B2'),
(2, 103, 'B3'),
--(2, 104, 'B3'),
(2, 105, 'B5');
IF EXISTS (SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'OtherTable')
DROP TABLE OtherTable;
CREATE TABLE OtherTable (C2 INT);
INSERT INTO OtherTable (C2) VALUES
(100),
(101),
(102),
(103),
(104),
(105),
(106);
우수의 지시
top(1)
를 사용하여Data
값의 상관 관계 서브 쿼리를 가져 오기 ! TOP가 CTE 레벨에서 어떻게 사용될 수 있는지 알아 내려고 노력했지만 데이터의 행 수준에 맞습니다! –