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
相关产品推荐
相关产品推荐

