开发者社区 问答 正文

SQL Server表嵌套的xml文件

SQL Server表嵌套的xml文件

展开
收起
贺贺_ 2019-12-05 23:30:08 445 分享
分享
版权
举报
1 条回答
写回答
取消 提交回答
  • 感谢@Isaac提供的数据脚本!

    for <List> elements in <Branch> node, like <Branch><List/><List/></Branch>:
    
    CREATE TABLE #mytable
    (
       Action  VARCHAR(10),
       Action2 VARCHAR(10),
       Name    VARCHAR(50),
       Action3 VARCHAR(10),
       Batch   INT
    );
    
    INSERT INTO #mytable(Action,Action2,Name,Action3,Batch) 
    VALUES 
    ('add','PL','Steve','add',1),
    ('add','PL','Steve','add',3),
    ('add','PL','Steve','add',4),
    ('add','PL','Steve','add',5),
    ('add','PL','Steve','add',1),
    ('add','PL','Steve','add',3),
    ('add','PL','Steve','add',4),
    ('add','PL','Steve','add',5);
    
    
    INSERT INTO #mytable(Action,Action2,Name,Action3,Batch) 
    VALUES 
    ('update','PL','John','insert',5),
    ('update','PL','Paul','insert',1),
    ('update','PL','Chris','delete',3),
    ('update','PL','Mary','update',4),
    ('update','PL','Jane','delete',5);
    
    
    select a1.Action as '@Action', s.brancexml as '*'
    from
    (
    select distinct Action
    from #mytable
    ) as a1
    cross apply 
    (
        select
        (
            select a2.Action2 AS '@Action', a2.Name as '@Name', x.listxml as     '*'
            from
        (
            select distinct Action2, Name
            from #mytable AS b
            where b.Action = a1.Action
        ) AS a2
        cross apply
        (
            select
            (
                select distinct c.Action3 as '@Action', c.Batch as '@Batch'
                from #mytable AS c
                where c.Action = a1.Action AND c.Action2 = a2.Action2 AND c.Name = a2.Name
                for xml path('List'), type
            ) AS listxml
        ) as x
        for xml path('Brance'), type
        ) as brancexml
    ) as s
    for xml path('Start'), root('Entries'), type
    
    2019-12-05 23:31:08 举报
    赞同 评论

    评论

    全部评论 (0)

    登录后可评论
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等