sql - 使用 FOR XML 对 2 个 sql 表进行分组

标签 sql sql-server xml

我下面有一个 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/

相关文章:

sql - 如何设置从 eclipse 到 SQLServer 的连接?

SQL多表更新语法

android - RTL-Layout 中忽略准则(Android Constraint-Layout)

python - 添加到 Notepad++ 中的 Python 语法高亮

c# - 动态扩展SQL语句-页面搜索

c# - sql 依赖项如何用于来回传递数据

sql-server - 如何从 Azure SQL 迁移到 SQL Server?

sql - 当没有行匹配时从左表中选择最后一条记录

xml - 为什么我从 XML::SAX::PurePerl::EncodingDetect 得到一个错误,尽管我没有加载那个模块?

MySQL 搜索与用户输入的搜索字符串相匹配的文章