MS SQL、分组、XML等。。。需要有关此查询的帮助吗

MS SQL、分组、XML等。。。需要有关此查询的帮助吗,sql,sql-server,tsql,Sql,Sql Server,Tsql,我需要你的帮助。遗憾的是,我对SQL的了解不如对C#(或大多数其他语言)的了解,而且我对这个查询已经达到了极限。这篇文章可能有点冗长,所以我为此提前道歉,但我想确保我包括了所有必要的信息 我的目标是创建一个查询,从SQL中选择数据,按其中一列的子字符串值对其进行分组,并以XML输出。我离得很近,但我撞到墙了 下面是一个示例,说明它应该是什么样子: <EXAMPLE_DATA> <headEnd nam="AAAA"> <hardware fromDevi

我需要你的帮助。遗憾的是,我对SQL的了解不如对C#(或大多数其他语言)的了解,而且我对这个查询已经达到了极限。这篇文章可能有点冗长,所以我为此提前道歉,但我想确保我包括了所有必要的信息

我的目标是创建一个查询,从SQL中选择数据,按其中一列的子字符串值对其进行分组,并以XML输出。我离得很近,但我撞到墙了

下面是一个示例,说明它应该是什么样子:

<EXAMPLE_DATA>
  <headEnd nam="AAAA">
    <hardware fromDevice="ExampleDeviceAAAA" />
    <hardware fromDevice="ExampleDeviceAAAA" />
    <hardware fromDevice="ExampleDeviceAAAA" />
  </headEnd>
  <headEnd nam="BBBB">
    <hardware fromDevice="ExampleDeviceBBBB" />
    <hardware fromDevice="ExampleDeviceBBBB" />
    <hardware fromDevice="ExampleDeviceBBBB" />
</EXAMPLE_DATA>
为了让这篇文章更容易阅读,我删除了很多非必要的专栏

那么,看看我需要XML是什么样子的,这可能吗?我想一切都有可能。。。但在这种情况下,我完全被难住了

谢谢你的阅读

编辑:为了确保我的问题清楚,我需要的是SQL代码输出由hardware.Name的子字符串查询分组的XML数据。我试图使输出看起来像上面的第一个XML块。

给你:

 SELECT 
   RIGHT(categ.Name, 4) as "@nam" ,    
   (
   SELECT hardware.Name as "@fromDevice"
   FROM tblHardware AS hardware
   WHERE RIGHT(categ.Name, 4) = RIGHT(hardware.Name, 4)
   for xml path ('hardware') , type
   )
 FROM tblHardware as categ
 GROUP BY  RIGHT(categ.Name, 4)
 for xml path ('headEnd'), root ('EXAMPLE_DATA')
给你:

 SELECT 
   RIGHT(categ.Name, 4) as "@nam" ,    
   (
   SELECT hardware.Name as "@fromDevice"
   FROM tblHardware AS hardware
   WHERE RIGHT(categ.Name, 4) = RIGHT(hardware.Name, 4)
   for xml path ('hardware') , type
   )
 FROM tblHardware as categ
 GROUP BY  RIGHT(categ.Name, 4)
 for xml path ('headEnd'), root ('EXAMPLE_DATA')

问题到底是什么?您是否需要XML转换脚本或TSQL更改脚本,或者您是否解决了问题?请看前两个XML块。。。您将看到,第一个声明我的输出应该像那个,而不是第二个。所以问题是,有人能帮我输出数据,使它看起来像第二个XML块吗?问题到底是什么?您是否需要XML转换脚本或TSQL更改脚本,或者您是否解决了问题?请看前两个XML块。。。您将看到,第一个声明我的输出应该像那个,而不是第二个。所以问题是,有人能帮我输出数据,使它看起来像第二个XML块吗?
 SELECT 
   RIGHT(categ.Name, 4) as "@nam" ,    
   (
   SELECT hardware.Name as "@fromDevice"
   FROM tblHardware AS hardware
   WHERE RIGHT(categ.Name, 4) = RIGHT(hardware.Name, 4)
   for xml path ('hardware') , type
   )
 FROM tblHardware as categ
 GROUP BY  RIGHT(categ.Name, 4)
 for xml path ('headEnd'), root ('EXAMPLE_DATA')