2016-09-15 11 views
0

私は特定の操作を実行するために必要なテーブルGeoTableを持っています。複数のフィールドを1つのフィールドに連結してSQLでリンクする

テーブルには2つの主要なフィールドがあります。これはマッピングプロジェクトであるため、Geoフィールド(緯度と経度の文字列内の位置のジオメトリを表すvarchar(max))があります)、およびIDフィールド(これはbigintです)が含まれています。

しかし、複数のIDは同じGeoを持つことができます(たとえば、1つの場所が何度も販売されている可能性があります)。それらのグループをまとめてGeoが持つIDを教えてください。ですから、例えば:私はここにいくつかのコードを持っている

Geo            IDs 
(My big Geometry string here)     1,2,3,4,5, 
(My other big Geometry string here)    6,7,8, 

Geo            IDs 
(My big Geometry string here)     1 
(My big Geometry string here)     2 
(My big Geometry string here)     3 
(My big Geometry string here)     4 
(My big Geometry string here)     5 
(My other big Geometry string here)    6 
(My other big Geometry string here)    7 
(My other big Geometry string here)    8 

...私は必要なもの基本的にですが、それは本当に遅い実行される...となり(私はなるだろう)時点で約20000レコードをフェッチするが、オンラインの人々は、それはかなり瞬時に期待するウェブサイトを通じて:

SELECT DISTINCT Geo, (
     SELECT ','+LEFT(CAST(G2.Id AS NVARCHAR),11) AS [text()] 
     From dbo.GeoTable G2 
     Where G2.Geo = GeoTable.Geo 
     ORDER BY Id 
     For XML PATH ('') 
    ) [IDs] 
FROM   GeoTable 

申し訳ありませんが、また、私はMS SQL Serverを使用していないので、何のGROUP_CONCATてる言及する必要があります。

+0

私は、これはあなたが使用している実際のデータベースであると仮定すると、SQL Serverのコードを追加しました。 –

答えて

0

あなたはいつもこれは動作するはず一度だけdistinct句

1

を使用して、各文字列の出現を保存し、それらを表示するために変数を使用することができます。

WITH Src AS 
(
    SELECT * FROM (VALUES 
    ('My big Geometry string here)  ', 1), 
    ('My big Geometry string here)  ', 2), 
    ('My big Geometry string here)  ', 3), 
    ('My big Geometry string here)  ', 4), 
    ('My big Geometry string here)  ', 5), 
    ('My other big Geometry string here)', 6), 
    ('My other big Geometry string here)', 7), 
    ('My other big Geometry string here)', 8) 
    ) T(Geo, ID) 
) 
SELECT DISTINCT Geo, IDs 
FROM Src S 
CROSS APPLY (SELECT STUFF((SELECT ','+CONVERT(varchar(10),S2.ID) 
          FROM Src S2 
          WHERE S.Geo=S2.Geo 
          FOR XML PATH('')),1,1,'')) T(IDs) 

結果

Geo         IDs 
-------------      ---------- 
My big Geometry string here)  1,2,3,4,5 
My other big Geometry string here) 6,7,8 
+0

うーん、興味深い...ちょうど私のコードで動作するようにしようとしています。 – user25730

+0

残念ながら、良い解決策の間に、それは私のニーズには遅すぎます。おそらくクライアントサイドのコードでこれを回避する別の方法を考えなければならないと思う。 – user25730

関連する問題