SQL - 如何将多行的单个单元格连接成单行?

时间:2016-08-31 10:51:21

标签: sql

我有两张桌子。一个有属性,一个有建筑物。每个属性与理论上无限量的建筑物相关联。现在我有这样的代码:

Select Property.ID, Building.Number
From Properties
Left Join Buildings on Buildings.pID = Property.ID

这将返回所有建筑物及其相关属性的表格。然而,这意味着所有属性都会出现多次,因为它们有建筑物。

我想要的是一个结果,其中每个属性的建筑物与其自身在同一行中,因此它成为属性的结果,其建筑物,而不是建筑物的结果及其属性。

编辑:我应该指出,这是一个我只有读取权限的服务器。

2 个答案:

答案 0 :(得分:0)

如果房产真的能够拥有无限数量的建筑物,那么这将变得非常困难。您将不得不创建一个具有无限行数的表(每个潜在建筑物一个),并将所有这些行设置为NULL,除非有建筑物。

您不能拥有动态数量的列。它必须事先设定。有一些次优的解决方法,但它们都与数据库规范化非常相反。

编辑:如果它仅用于查询结果,您可以使用PIVOT()

答案 1 :(得分:0)

在sql server中,您可以使用STUFF功能组合结果集。

SELECT  P.ID
       ,STUFF((SELECT ', ' + CAST(b.Number AS VARCHAR(10)) [text()]
         FROM Buildings b 
         WHERE b.pID = P.ID
         FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,' ') BuildingNumbers
FROM Properties p