2013-05-02 53 views
0

這應該很容易,但我只是沒有得到它。我有一個臨時表,我從不同的來源填充。在臨時表中,我有一堆可能具有相同細分名稱的行。如果細分名稱相同,則我希望該細分的頂部緯度和經度位於該細分的所有行中。我需要爲臨時表中iSource = 1或2的所有細分部分執行此操作。iSource字段是不同的來源。 0是最可靠的,4是沒有緯度或長度。MS SQL更新查詢 - 將具有相同字段A的所有行更新爲頂部A值

臨時表

SubdivisionName Latitude Longitude iSource 
A    100  200  0 
A    100  200  0 
A    102  200  2 
B    104  202  1 
B    105  203  1 
B    106  202  2 

所需的結果

SubdivisionName Latitude Longitude iSource 
A    100  200  0 
A    100  200  0 
A    100  200  2 
B    104  202  1 
B    104  202  1 
B    104  202  2 

我嘗試這樣做,但是SQL Server 2005不喜歡我的前綴TT或TTT。你能爲我指出正確的方向嗎?

WITH #TempTable 
AS 
(
SELECT TTT.* 
, ROW_NUMBER() OVER(PARTITION by SubdivisionName ORDER BY iSource) AS rnk 
from #TempTable TTT WHERE iSource IN (1,2) 
) 
UPDATE #TempTable 
SET FieldSheetLat = TTT.FieldSheetLat, Longitude = TTT.FieldSheetLong 

回答

0
;WITH CTE 
AS 
(
    SELECT TTT.* 
     , ROW_NUMBER() OVER(PARTITION by SubdivisionName ORDER BY iSource) AS rnk 
     FROM #TempTable TTT 
) 
UPDATE TT 
    SET FieldSheetLat = CTE.FieldSheetLat, Longitude = CTE.FieldSheetLong 
    FROM #TempTable TT 
    JOIN CTE ON CTE.SubdivisionName = TT.SubdivisionName 
       AND CTE.rnk = 1 
WHERE TT.iSource > 0; 

  1. 最後過濾器是因爲沒有從未需要更新任何ISOURCE = 0行
  2. 從JOIN圖案更新在這裏所使用的,其中源是CTE where rnk=1,目標是#TempTable別名爲TT
+0

謝謝你的e答案和幫助我格式化文本! – Mike 2013-05-08 12:52:42