You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 14:10:58