我下面有一个 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')
最佳答案
这是一种方法
示例
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>
关于sql - 使用 FOR XML 对 2 个 sql 表进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43554314/