2017-05-29 4 views
0

私は以下のようにPostgresのを使用して地域でのポイントを交差するcase文を記述しようとしていますして返します。ST_Intersectは、二重結果

SELECT Point.id, Point.geom, Box.Postcode, 
CASE 
    WHEN ST_Intersects(Box.geom, Point.geom) AND Box.postcode = 'A' THEN 'A' 
    WHEN ST_Intersects(Box.geom, Point.geom) AND Box.postcode = 'B' THEN 'B' 
    WHEN ST_Intersects(Box.geom, Point.geom) AND Box.postcode = 'C' THEN 'C' 
    ELSE 'No postcode' 
END AS PointPostcode 

アイデアはボックスの内側に配置されているすべてのポイントは、新しい属性列を持っているということです'PointPostCode'という名前で、ポストコード情報を持っています: 'A'、 'B'、 'C​​'は場所によって異なります。また、ボックスの外側にあるポイントには「郵便番号なし」の情報があります。

私はこれらのクエリを正常に実行しています。私はまた、私が望むものとして新しい列を取得しました。ボックス内にあるポイントには、郵便番号情報も正しく表示されますが、同時に、すべてのポイントに「郵便番号なし」というラベルが付けられています(値を再二倍します)。

私の質問の間違いはどこですか?

答えて

0

私はあなたが次のクエリを実行したいと考えている:

SELECT Point.id, Point.geom, Box.Postcode, 
CASE 
    WHEN Box.postcode = 'A' THEN 'A' 
    WHEN Box.postcode = 'B' THEN 'B' 
    WHEN Box.postcode = 'C' THEN 'C' 
    ELSE 'No postcode' 
END AS PointPostcode 
WHERE ST_Intersects(Box.geom, Point.geom) 
+0

今私は、多くのおかげで、正しいクエリを作成する方法を理解... – reyalino

+0

答えが正しいかどう正しいとしてそれをマークしてください – e4c5