@@版本1更新上一行中非空值的空列值
使用SQL Server 2008時,我試圖將值級聯到列的下方。我有一個包含組ID(GID)和Seq的表格,其中包含組內記錄的排序。對於存在的列,在這種情況下,名稱和薪酬 - 我真正的表有超過50列,如果他們包含空值我需要更新NULL值與該列的前一行中包含非空值的值。
這裏是值得說明這一點:
GID Seq Name Salary
1 1 James NULL
1 2 NULL 100
1 3 NULL NULL
2 1 NULL 81
2 2 Smith NULL
2 3 NULL NULL
3 1 Charles NULL
3 2 NULL NULL
3 3 Brown NULL
3 4 NULL 75
4 0 Ron 50
4 1 NULL 20
4 2 NULL NULL
我的結果應該是:
GID Seq Name Salary
1 1 James NULL
1 2 James 100
1 3 James 100
2 1 NULL 81
2 2 Smith 81
2 3 Smith 81
3 1 Charles NULL
3 2 Charles NULL
3 3 Brown NULL
3 4 Brown 75
4 0 Ron 50
4 1 Ron 20
4 2 Ron 20
我要做到這一點,而無需使用動態SQL,環或遊標。
代碼簡單的測試案例:
DECLARE @Test TABLE (GID int, Seq int, Name varchar(50), Salary decimal)
INSERT INTO @Test VALUES (1, 1, 'James', NULL)
INSERT INTO @Test VALUES (1, 2, NULL, 100.40)
INSERT INTO @Test VALUES (1, 3, NULL, NULL)
INSERT INTO @Test VALUES (2, 1, NULL, 80.50)
INSERT INTO @Test VALUES (2, 2, 'Smith', NULL)
INSERT INTO @Test VALUES (2, 3, NULL, NULL)
INSERT INTO @Test VALUES (3, 1, 'Charles', NULL)
INSERT INTO @Test VALUES (3, 2, NULL, NULL)
INSERT INTO @Test VALUES (3, 3, 'Brown', NULL)
INSERT INTO @Test VALUES (3, 4, NULL, 75)
INSERT INTO @Test VALUES (4, 0, 'Ron', 50)
INSERT INTO @Test VALUES (4, 1, NULL, 20)
INSERT INTO @Test VALUES (4, 2, NULL, NULL)
SELECT * FROM @Test
@@ 2版 感謝GilM爲解決@@第1版。我已經做了一個小除了問題。 Seq列中的起始數字可以是0或1.在第一個問題的解決方案中,遞歸CTE中的錨是指1,如果它的1或0?在這個版本中,最後3行數據(GID = 4)被添加到所有上述三個代碼塊中。
謝謝!
+1包括測試用例 – podiluska 2012-08-02 21:11:28
KARTHIK - 你不覺得這個問題有點可笑時,你可以邀請埃裏克? – EBarr 2012-08-02 21:22:06
你是否可以編輯併發布'@@ Version'以防萬一答案變成特定的? – EBarr 2012-08-02 21:30:23