我不确定我的问题是否正确表达,因为我尝试了 SO 建议的帖子,但没有完全找到我想要的内容。
简而言之,我试图表明一个公民属于哪个“地区”。每个公民将与 3 个区域相关联Borough
:Neighbourhood
和Natural Neighbourhood
。公民通过一个连接表链接到每个区域。
我只需要一行(对于数据库中的每个公民)来显示他们所属的所有区域。
目标是这样的:
CitizenId CitizenName Borough Neighbourhood NaturalNeighbourhood
----------------------------------------------------------------------------
1 Fred Elmbridge Esher & Claygate Esher
所涉及的表格如下所示。
公民
ID Name
1 Fred
区域类别
ID Value
1 root
2 Division
3 Borough
4 Neighbourhood
5 Natural Neighbourhood
区域类型
ID FK_AreaCategory Value
1 3 Elmbridge
2 4 Esher & Claygate
3 5 Esher
市民区
FK_Citizen FK_AreaType
1 3
1 4
1 5
对于了解他们的东西但我不知道如何处理它的人来说,这无疑很简单。
提前致谢。
谢谢@podiluska。我现在有了这个,它经过稍微重新设计,可以在我的数据库中使用确切的表名。我最初收到错误:
“'pivot' 附近的语法不正确。您可能需要将当前数据库的兼容级别设置为更高的值才能启用此功能。请参阅 ALTER DATABASE 的 SET COMPATIBILITY_LEVEL 选项的帮助。”
然后我检查并看到数据库显示为与 SQL Server 2000 兼容。当我将其更改为兼容 SQL Server 2008 时,一切正常。
USE ACRM
GO
select
*
from
(
select c.ID, FirstName, at.Value as area, ac.value as category
from
ACRM.DBO.ActiveCitizen c
inner join ACRM.DBO.ActiveCitizenAreas ca on c.Id = ca.FK_ActiveCitizen
inner join ACRM.DBO.AreaType at on ca.FK_AreaType = at.ID
inner join ACRM.DBO.AreaCategory ac on at.FK_AreaCategory = ac.id
) v
pivot (max(area) for category in (Borough, Neighbourhood, [Natural Neighbourhood])) p
谢谢。