0

これは簡単なはずですが、私はそれを理解していません。さまざまなソースから入力している一時テーブルがあります。一時テーブルには、同じサブディビジョン名を持つ可能性のある一連の行があります。サブディビジョン名が同じ場合、そのサブディビジョンのすべての行に、そのサブディビジョンの緯度と経度の上位が表示されるようにします。iSource = to 1 または 2 を持つ一時テーブル内のすべてのサブディビジョンに対してこれを行う必要があります。iSource フィールドはさまざまなソースです。0 が最も信頼性が高く、4 番目は緯度も経度もありません。

一時テーブル

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
4

1 に答える 1

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. ここでは、UPDATE from JOIN パターンが使用されます。ここで、ソースは でCTE where rnk=1あり、ターゲットは#TempTableとしてエイリアス化されていますTT
于 2013-05-02T21:13:44.537 に答える