2017-12-01 7 views
0

2つのテーブルがあり、そのうちの1つにオブジェクトの位置を示すジオメトリ列と、ジオメトリ形式のポイント座標を持つもう1つのテーブル(SQL Server)があります。私は最初のテーブルから最も近いオブジェクトを見つけるために2番目のテーブルの各ポイントが必要です。さて、これはその特定の点に最も近いテーブルから私にレコードを与えるSQL - レコードごとの最適な処理方法

DECLARE @g geometry = geometry::STGeomFromText('POINT 
(1 2,)',0); 
SELECT TOP(1) geom.ToString() 
FROM [T1].[dbo].[table_shapes] 
WHERE geom.STDistance(@g) IS NOT NULL 
ORDER BY geom.STDistance(@g); 

が、私はからの各点について、その最も近い形状を見つけたい:私はシングルポイントのためにこれを行うことができ、クエリを得ましたポイントをハードコーディングするのではなく、ポイントを持つテーブルを作成し、結果テーブルに関連付けられたシェイプを新しいテーブルに配置したいと考えています。 私は、各レコードを繰り返し実行し、上記のクエリを実行する機能を考えていますが、これは遅くなるため、最良の方法ではないかもしれません... これはJOINでどうやって達成できますか?

答えて

1

私はあなたがこのために探していると思う、

DECLARE @gジオメトリ=幾何学:: STGeomFromText( 'POINT (1 2)'、0);

select * from mytable tt 
CROSS apply(
SELECT TOP(1) geom.ToString() 
FROM [T1].[dbo].[table_shapes] 
WHERE geom.STDistance(tt.g) IS NOT NULL 
ORDER BY geom.STDistance(tt.g) 
)ca 

なぜ新しいテーブルに結果を保存したいのですか?

0

私は現在、空間DBの設定がありません。だから、これはテストされていません。

SELECT s.geom.ToString(), g.geom.ToString() 
FROM table_shapes s , (SELECT TOP(1) geom 
         FROM other_table 
         WHERE geom geom.STDistance(s.geom) IS NOT NULL 
         ORDER BY geom.STDistance(s.geom)) g 
関連する問題