【问题标题】:FOR XML PATH clause in SQL ServerSQL Server 中的 FOR XML PATH 子句
【发布时间】:2026-01-20 10:15:02
【问题描述】:

我的列有一个工作脚本,到目前为止一切顺利,问题是 - 我如何隐藏那些 x 和 y 列?有什么办法吗?

我想要得到的结果是 - 仅显示 Z 列。如果我只是在第一行添加注释,它将无法正常工作并出现 xml 路径错误。

SELECT      
    C1S_PATIENTGROUP.PG_K AS [x], 
    C1S_PATIENTGROUP.NAME AS [y],
    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

【问题讨论】:

  • 您使用的是哪个 SQL Server 版本?在 SQL Server 2017 及更高版本中,您可以改用STRINGG_AGG
  • 如果从SELECT 中删除C1S_PATIENTGROUP.PG_K AS [x], C1S_PATIENTGROUP.NAME AS [y],,我不会收到错误消息
  • 仅供参考,如果您想删除字符串的第一个字符,STUFF 更适合。
  • 哦,感谢大家提供如此出色的解决方案。会想办法的。我不知道这个添加东西的解决方案,会读到这个。谢谢!

标签: sql-server xml concatenation multiple-columns


【解决方案1】:

可以使用子查询:

如果我弄错了,请告诉我,以便我删除它。

SELECT SUBQ.Z FROM 
(
select * from Integral_TranSELECT      
    C1S_PATIENTGROUP.PG_K AS [x], 
    C1S_PATIENTGROUP.NAME AS [y],
    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 ) SUBQ

【讨论】:

  • 试过了,有一些语法错误。不知道在这种情况下什么是最好的解决方案,也许它也可以用 subq 来完成。没有线索。
  • 试试吧,应该可以的
最近更新 更多