Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server FOR XML行组合行_Sql Server_Xml_Tsql - Fatal编程技术网

Sql server SQL Server FOR XML行组合行

Sql server SQL Server FOR XML行组合行,sql-server,xml,tsql,Sql Server,Xml,Tsql,我最初试图在C#中实现这一点,并放弃了该路径进行查询。我有一个表(SiteTest),其中一列名为“SiteID”,另一列名为“Services” 然后,我创建一些临时表,并在“服务”列上使用交叉应用来获得: 我现在尝试使用FOR XML: SELECT ProviderName ,SiteID ,SiteName ,( SELECT Services AS [CoveredServiceCode] FROM

我最初试图在C#中实现这一点,并放弃了该路径进行查询。我有一个表(SiteTest),其中一列名为“SiteID”,另一列名为“Services”

然后,我创建一些临时表,并在“服务”列上使用交叉应用来获得:

我现在尝试使用FOR XML:

SELECT
   ProviderName
   ,SiteID
   ,SiteName
   ,(
       SELECT
         Services AS [CoveredServiceCode]
       FROM
         ProviderSiteTestTable AS [CoveredService]
         FOR XML AUTO, TYPE, ELEMENTS, ROOT('CoveredServices')
   )
FROM
    ProviderSiteTestTable AS [ProviderSite]
    FOR XML AUTO, TYPE, ELEMENTS, ROOT('ProviderSites')
然后我得到:

<ProviderSites>
    <ProviderSite>
        <ProviderName>Health Center USA</ProviderName>
        <SiteID>15</SiteID>
        <SiteName>Texas Behavioral Health LLC</SiteName>
        <CoveredServices>
          <CoveredService>04</CoveredService>
        </CoveredServices>
    </ProviderSite>
    <ProviderSite>
        <ProviderName>Health Center USA</ProviderName>
        <SiteID>15</SiteID>
        <SiteName>Texas Behavioral Health LLC</SiteName>
        <CoveredServices>
          <CoveredService>08</CoveredService>
        </CoveredServices>
    </ProviderSite>
    ....
    ....
</ProviderSites>

美国健康中心
15
德克萨斯行为健康有限公司
04
美国健康中心
15
德克萨斯行为健康有限公司
08
....
....
我试图获取的结果(该站点下该站点的所有“CoveredServices”):


美国健康中心
15
德克萨斯行为健康有限公司
04
08
....
....
....
更新 看起来我要找的可能是一个小组, 现在测试此功能

您可以尝试以下操作:

DECLARE @mockup TABLE(ID INT, ProviderID VARCHAR(100),ProviderName VARCHAR(100),SiteID INT,SiteName VARCHAR(100),OpenDate DATE,[Services] VARCHAR(10));

INSERT INTO @mockup VALUES
 (1,'12-000000','Health Center USA',15,'Texas blah','20120107','04')
,(1,'12-000000','Health Center USA',15,'Texas blah','20120107','08')
,(2,'12-000000','Health Center USA',15,'Texas blah','20120107','ab')
,(2,'12-000000','Health Center USA',15,'Texas blah','20120107','cd');

SELECT tbl.ProviderName
      ,tbl.ID
      ,tbl.SiteName
      ,(
        SELECT tbl2.[services] AS CoveredService
        FROM @mockup tbl2
        WHERE tbl2.ID=tbl.ID --correlated sub-query
        FOR XML PATH(''),TYPE
      ) AS CoveredServices
FROM @mockup tbl
GROUP BY tbl.ProviderName,tbl.ID,tbl.SiteName --Control the final Site-Order here...
FOR XML PATH('ProviderSite'),ROOT('ProviderSites');
结果

<ProviderSites>
  <ProviderSite>
    <ProviderName>Health Center USA</ProviderName>
    <ID>1</ID>
    <SiteName>Texas blah</SiteName>
    <CoveredServices>
      <CoveredService>04</CoveredService>
      <CoveredService>08</CoveredService>
    </CoveredServices>
  </ProviderSite>
  <ProviderSite>
    <ProviderName>Health Center USA</ProviderName>
    <ID>2</ID>
    <SiteName>Texas blah</SiteName>
    <CoveredServices>
      <CoveredService>ab</CoveredService>
      <CoveredService>cd</CoveredService>
    </CoveredServices>
  </ProviderSite>
</ProviderSites>

样本数据最好作为+。请将您的问题包括在内,您当前的尝试和您想要的结果。欲知详情,,
<ProviderSites>
  <ProviderSite>
    <ProviderName>Health Center USA</ProviderName>
    <ID>1</ID>
    <SiteName>Texas blah</SiteName>
    <CoveredServices>
      <CoveredService>04</CoveredService>
      <CoveredService>08</CoveredService>
    </CoveredServices>
  </ProviderSite>
  <ProviderSite>
    <ProviderName>Health Center USA</ProviderName>
    <ID>2</ID>
    <SiteName>Texas blah</SiteName>
    <CoveredServices>
      <CoveredService>ab</CoveredService>
      <CoveredService>cd</CoveredService>
    </CoveredServices>
  </ProviderSite>
</ProviderSites>
DECLARE @mockup TABLE(ID INT, ProviderID VARCHAR(100),ProviderName VARCHAR(100),SiteID INT,SiteName VARCHAR(100),OpenDate DATE,[Services] VARCHAR(100));

INSERT INTO @mockup VALUES
    (1,'12-000000','Health Center USA',15,'Texas blah','20120107','04,08,01,02')
,(2,'12-000000','Health Center USA',15,'Texas blah','20120107','04,08,02,12')

SELECT tbl.ProviderName
        ,tbl.ID
        ,tbl.SiteName
        ,CAST('<CoveredService>' + REPLACE([services],',','</CoveredService><CoveredService>') + '</CoveredService>' AS XML) AS CoveredServices
FROM @mockup tbl
FOR XML PATH('ProviderSite'),ROOT('ProviderSites');