2011-01-14 1 views
0

I次のSQL文を持っている - 私たちの自転車道は、交差するすべてのジップコードを見つけようとしています: -SQL UPDATE文にTOP 1とPARTITION BYを追加するにはどうすればよいですか?

自転車道がたまたま(二つ以上のジップコードを交差していない限り...大丈夫です
UPDATE a 
SET a.ZipCodeId = d.ZipCodeId 
FROM [dbo].[BikePaths] a 
    INNER JOIN [dbo].[BikePathBoundaries] b ON b.ZipCodeId = c.ZipCodeId 
    INNER JOIN [dbo].[ZipCodeBoundaries] c ON b.Boundary.STIntersects(c.Boundary) = 1 

ロット)。ですから、私はGet the zipcode which this bikepath MOSTLY intersectsと言っています(私は郵便番号へのすべてのbikpathsのための別のリストを持っています)。

これはSELECT statemementだった場合、それは...

SELECT a.BikePathId, a.BikePathName, c.ZipCodeId, d.ZipCode, 
    c.Boundary.STIntersection(d.Boundary).STArea() AS Area, 
    ROW_NUMBER() OVER (PARTITION BY a.BikePathId ORDER BY c.Boundary.STIntersection(d.Boundary).STArea() DESC) AS RowNumber 
FROM [dbo].[BikePaths] a 
    INNER JOIN [dbo].[BikePathBoundaries] b on a.BikePathId = b.BikePathId 
    INNER JOIN [dbo].[ZipCodeBoundaries] c on b.Boundary.STIntersects(c.Boundary) = 1 
    INNER JOIN [dbo].[ZipCodes] d on c.ZipCodeId = d.ZipCodeId 

を次のようになり、その後、私はちょうど私がBikePathごとに1つの行を取得することを確認する TOP 1 WHERE RowNumber = 1を追加することができますが...これその自転車の道がほとんど/交差に含まれている郵便番号を持っています。

私は2番目のSQLステートメントが毛並みを帯びていることを知っていますが、そのGeo-Spatialのものが追加されましたが、誰かがこれをUPDATEステートメントに組み込むのを手伝ってくれますか?

答えて

3

私はジオ空間クエリを使用しませんが、2番目のクエリを共通テーブル式に入れてrow_numberフィールド= 1に結合できませんでしたか?

;WITH CTE AS (
SELECT a.BikePathId, c.ZipCodeId, 
    Rnum =ROW_NUMBER() OVER (PARTITION BY a.BikePathId ORDER BY c.Boundary.STIntersection(d.Boundary)) 
FROM  [dbo].[BikePaths] a 
    INNER JOIN [dbo].[BikePathBoundaries] b on a.BikePathId = b.BikePathId 
    INNER JOIN [dbo].[ZipCodeBoundaries] c on b.Boundary.STIntersects(c.Boundary) = 1 
    INNER JOIN [dbo].[ZipCodes] d on c.ZipCodeId = d.ZipCodeId) 
UPDATE a 
SET a.ZipCodeId = cte.ZipCodeId 
FROM [dbo].[BikePaths] a 
    INNER JOIN cte on cte.bikepathid =a.bikepathid and cte.rnum=1; 
+0

CTE's? Wtf!私はこれを前に与えた後、いくつかの答えでそれらを知ってはいけません:) –

+1

+1共通の表の表現のため – VoodooChild

+0

Awesomesauce。 CTEを完全に忘れてしまった - 私はいつもそれらが存在するのを忘れる。そしてSAにようこそ:)いくつかの点を持って:)(ああ、私はまた、セミコロンに気付きました。それを追加してください...それは年齢のために私を台無しにした原因:PIは 'CTEステートメント '。 –

関連する問題