我在下面有一个SQL查询,我想使用FOR XML语法格式化为XML。
SELECT
gr.id,
gr.created,
ts.ordernumber
FROM trGrouped gr
INNER JOIN transactions ts
ON ts.grouped_id = gr.id
WHERE ts.ordernumber IN ('4003970100000383', '4003970100000376', '4003970100000369', '1022108100000018')
这是我希望查询看起来像XML格式的一个例子。
<trans_groups>
<grouped id="56" created="4/14/2017">
<ordernumber>1022108100000001</ordernumber>
<ordernumber>1022108100000002</ordernumber>
<ordernumber>1022108100000003</ordernumber>
</grouped>
<grouped id="57" created="4/14/2017">
<ordernumber>1022109100000001</ordernumber>
<ordernumber>1022109100000002</ordernumber>
</grouped>
</trans_groups>
到目前为止,我还没有能够做到这一点。我尝试了以下但是这不是对订单进行分组。
select gr.id as [@id], gr.created as [@created],
(
SELECT ts.ordernumber as ordernumber
)
FROM trGrouped gr inner join transactions ts on ts.grouped_id = gr.id
where ts.ordernumber in('4003970100000383', '4003970100000376', '4003970100000369', '1022108100000018')
FOR XML PATH('grouped'), ROOT('trans_groups')
答案 0 :(得分:3)
这是一种方法
示例强>
Declare @YourTable table (id int,created date, ordernumber varchar(25))
Insert Into @YourTable values
(56,'04/14/2017','1022108100000001')
,(56,'04/14/2017','1022108100000002')
,(56,'04/14/2017','1022108100000003')
,(57,'04/14/2017','1022109100000001')
,(57,'04/14/2017','1022109100000002')
Select [@id] = id
,[@created] = convert(VARCHAR(10), created, 101)
,(
Select ordernumber
From @YourTable A1
Where A1.id = A.id
For XML Path(''), type
)
From (Select Distinct ID,Created From @YourTable ) A
For XML Path('grouped'), Root('trans_groups')
<强>返回强>
<trans_groups>
<grouped id="56" created="04/14/2017">
<ordernumber>1022108100000001</ordernumber>
<ordernumber>1022108100000002</ordernumber>
<ordernumber>1022108100000003</ordernumber>
</grouped>
<grouped id="57" created="04/14/2017">
<ordernumber>1022109100000001</ordernumber>
<ordernumber>1022109100000002</ordernumber>
</grouped>
</trans_groups>
答案 1 :(得分:0)
这对我有用。
select gr.id as [@id], gr.created as [@created],
(
SELECT ordernumber as ordernumber from transactions where grouped_id = grouped_id
and ordernumber in ('4003970100000383', '4003970100000376', '4003970100000369', '1022108100000018')
FOR XML path(''), type
)
FROM (SELECT distinct gr.id, created FROM trGrouped gr inner join transactions ts on ts.grouped_id = gr.id
where ts.ordernumber in('4003970100000383', '4003970100000376', '4003970100000369', '1022108100000018')) gr
FOR XML PATH('grouped'), ROOT('trans_groups')