在根元素上添加weekname的SQL Server XML路径
我正在尝试SQLServer2008的XML路径特性。但是我没有得到我期望的结果 我有一张这样的桌子:在根元素上添加weekname的SQL Server XML路径,xml,sql-server-2008,Xml,Sql Server 2008,我正在尝试SQLServer2008的XML路径特性。但是我没有得到我期望的结果 我有一张这样的桌子: EventId EventDesc WeekName -------------------------------- 101 A sunday 102 B Monday 103 C wednesaday <Events> <sunday
EventId EventDesc WeekName
--------------------------------
101 A sunday
102 B Monday
103 C wednesaday
<Events>
<sunday>
<E>
<NE>
<EventId>101</EventID>
<Name>A</Name>
</NE>
</E>
</sunday>
<Monday>
<E>
<NE>
<EventId>102</EventID>
<Name>B</Name>
</NE>
</E>
</Monday>
<Tuesday>
<E>
<NE>
<EventId>103</EventID>
<Name>C</Name>
</NE>
</E>
</Tuesday>
</Events>
如何以XML格式获取输出,如下所示:
EventId EventDesc WeekName
--------------------------------
101 A sunday
102 B Monday
103 C wednesaday
<Events>
<sunday>
<E>
<NE>
<EventId>101</EventID>
<Name>A</Name>
</NE>
</E>
</sunday>
<Monday>
<E>
<NE>
<EventId>102</EventID>
<Name>B</Name>
</NE>
</E>
</Monday>
<Tuesday>
<E>
<NE>
<EventId>103</EventID>
<Name>C</Name>
</NE>
</E>
</Tuesday>
</Events>
我的问题是,如何为XML输出中的每一行获取weekname?这不是最好的解决方案,绝对不是优雅的,因为它使用字符串连接来构建XML,但它完成了工作
;WITH CTE as
(
SELECT 101 as EventId, 'A' as EventDesc, 'sunday' as WeekName
UNION ALL SELECT 102 as EventId, 'B' as EventDesc, 'Monday'
UNION ALL SELECT 103 as EventId, 'C' as EventDesc, 'wednesaday'
)
SELECT '<Events>' +(
SELECT DISTINCT '<' + WeekName +'>' + (SELECT EventId,EventDesc FROM CTE C2 WHERE C2.WeekName = C1.WeekName FOR XML PATH('NE'),ROOT('E')) + '</' + WeekName +'>'
FROM CTE C1
FOR XML PATH('Events'),TYPE).value('.','NVARCHAR(MAX)') + '</Events>'