0

サブクエリ連結を行う次の SQL ステートメントがあります。気がつけば、それはFOR XML ..which を使用しています .. まあ .. 少し身震いします :: コードの匂いがするような気がします。

SQL Server 2008 でこれを行うより良い方法はありますか?

SELECT a.CityId AS LocationId, a.City,
     STUFF(
        (SELECT ', ' + x.County
         FROM [dbo].[CountiesView] x
            INNER JOIN [dbo].[CityCounties] y ON x.CountyId = y.CountyId
         WHERE y.CityId = a.CityId
         FOR XML PATH (''))
     , 1, 2, '')
FROM [dbo].[CitiesView] a
    where a.StateCode = 'NY'

このコードが行っていることは、ニューヨーク州のすべての都市 (およびその郡) をリストすることです。都市は 1 つ以上の郡に存在する可能性があるため、郡名を連結したいと考えています... そうしないと、郡ごとに 1 つの都市行が取得されます (これは望ましくありません)。

これをリファクタリングできますか?

COALESCE を使用しようとしましたが、うまくいきませんでした。

4

2 に答える 2

1

気にしないのでORDER、CLR カスタム集計を使用してこれを行うことができます。それはXMLメソッドよりもうまく機能する可能性があり、郡に&シンボルが含まれている場合、現在のアプローチは適切に処理されません(または<>それはありそうもないと思います!)

于 2011-02-09T11:50:35.867 に答える
1

「より良い」は見る人の目にあります。SQL Server 2005 以降でこれを行うためのより良い方法は見たことがありませんが、一生懸命探していません。

最善の方法は、おそらく独自の集計関数をプログラムすることです。私はむしろこのクエリを維持したいと思います。

于 2011-02-09T11:51:12.823 に答える