我有两张桌子。一个有属性,一个有建筑物。每个属性与理论上无限量的建筑物相关联。现在我有这样的代码:
Select Property.ID, Building.Number
From Properties
Left Join Buildings on Buildings.pID = Property.ID
这将返回所有建筑物及其相关属性的表格。然而,这意味着所有属性都会出现多次,因为它们有建筑物。
我想要的是一个结果,其中每个属性的建筑物与其自身在同一行中,因此它成为属性的结果,其建筑物,而不是建筑物的结果及其属性。
编辑:我应该指出,这是一个我只有读取权限的服务器。
答案 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