SQL多表关联查询重复行问题:如何实现单医院单条返回?
问题原因与解决方法
你的查询返回多行且大量Null的核心原因是:organizationprofile表中每个医院对应多条不同ItemID的记录,直接关联两张表后,每一条profile记录都会单独生成一行结果,只有匹配当前ItemID的CASE列会有值,其余列都是Null。
要实现每个医院一行数据,需要对同一医院的多条profile记录做行转列聚合,用聚合函数提取每个ItemID对应的有效值:
Select o.Name, o.Address, MAX(CASE When op.ItemID='9A4BC5A9-D5BA-4ABD-8722-7F493F941577' THEN op.ValueText END) As [Trauma Center], MAX(Case When op.ItemID='49408A41-E7A2-4036-BAF3-AFBD93B319D2' THEN op.ValueText END) AS [Number of Floors], MAX(Case When op.ItemID='D34B1D5F-630C-4375-8530-7D2A759B7E2F' THEN op.ValueText END) AS [Classification] FROM dbo.organization o JOIN dbo.organizationprofile op On o.ID = op.ID WHERE o.Active=1 GROUP BY o.ID, o.Name, o.Address
关键说明:
- 用
MAX()聚合函数:对于同一医院的多条记录,MAX会自动忽略Null值,保留对应ItemID的有效文本值 - 必须按
organization表的主键(ID)和需要展示的非聚合列(Name、Address)分组,确保每个医院只生成一行结果 - 给表加别名(
o、op)让SQL更简洁易读
内容的提问来源于stack exchange,提问作者A. Romain
相关产品推荐
相关产品推荐

