0

我有以下执行子查询连接的 SQL 语句。如果您注意到,它使用FOR XML ..which .. well .. 让我有点不寒而栗 :: 我觉得这是一些代码气味。

使用 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 回答