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

SQL Server使用FOR XML PATH查询时如何隐藏x、y列仅保留z列

你直接注释SELECT语句中x、y列触发报错的核心原因是:外层查询的两个LEFT JOIN会返回与病人分组数量匹配的多行数据,原查询中x、y列对应每个分组的独立值,删除这两列后会出现SELECT子句与隐式分组逻辑不匹配的问题,或返回大量重复的z值。

推荐两种可行的解决方案:

方案1(最优,删除冗余关联逻辑)

你需要的z列的计算逻辑完全在子查询内完成,仅依赖Z1_RPT_VIEW_15的[card identificator]字段,外层的两个LEFT JOIN属于冗余逻辑,可以直接删除,修改后的脚本如下:

SELECT DISTINCT
    SUBSTRING((SELECT ','+ [PatGroup].[PG_K] AS [text()]
               FROM D3_HOSPPATGROUPS [Hosp]
               INNER JOIN C1S_PATIENTGROUP [PatGroup] ON [Hosp].[PG_ID] = [PatGroup].[PG_ID]
               WHERE [Hosp].[HOSP_ID] = [card identificator]
               FOR XML PATH ('')), 2, 1000) AS [z] 
FROM         
    Z1_RPT_VIEW_15 

加入DISTINCT是为了避免Z1_RPT_VIEW_15中存在重复[card identificator]时返回重复的z值,如果你确定该表中该字段唯一,可以去掉DISTINCT。

方案2(保留原关联逻辑)

如果你不想修改原查询的关联结构,直接在外层SELECT添加DISTINCT去重即可,修改后的脚本如下:

SELECT DISTINCT
    SUBSTRING((SELECT ','+ [PatGroup].[PG_K] AS [text()]
               FROM D3_HOSPPATGROUPS [Hosp]
               INNER JOIN C1S_PATIENTGROUP [PatGroup] ON [Hosp].[PG_ID] = [PatGroup].[PG_ID]
               WHERE [Hosp].[HOSP_ID] = [card identificator]
               FOR XML PATH ('')), 2, 1000) AS [z] 
FROM         
    Z1_RPT_VIEW_15 
LEFT OUTER JOIN
    D3_HOSPPATGROUPS ON Z1_RPT_VIEW_15.[card identificator] = D3_HOSPPATGROUPS.HOSP_ID 
LEFT OUTER JOIN
    C1S_PATIENTGROUP ON C1S_PATIENTGROUP.PG_ID = D3_HOSPPATGROUPS.PG_ID

内容的提问来源于stack exchange,提问作者user15060642

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:48:04