如何通过加入和使用 STUFF 获取 SQL 查询,并正确排序 FOR XML PATH

How do I get SQL query with join and using STUFF and FOR XML PATH be sorted correctly

我有一个母版table,每个键有一行,细节table每个键有很多行,序列字段有一个描述字段,我需要连接在一起并创建一个每个键的行。我的代码做得很好,但详细数据行没有按正确顺序连接的数据。数据以 Excel 电子表格形式发送给我,我使用导入向导将数据添加到数据库中。由于详细数据中的顺序不正确,我添加了一个 sub select 来按键和序列号对数据进行排序,这些序列号是输入到 STUFF WITH XML PATH 中的。我仍然以错误的顺序获取数据。如果我先对电子表格中的数据进行排序,然后将其加载到数据库中,它就可以正常工作。我真的需要它动态工作,因为我想将它分发给我的团队,我们可以将它用于不同的 tables。关于为什么带有 STUFF FOR XML PATH 的 sub select 不起作用的任何想法?我怎样才能做我需要的?

这是我的代码:

SELECT pic, pisc, piin
    , STUFF((SELECT ' ' + P.PIIDTA FROM PI115AP P
    Where P.PIC =B.PIC
    and P.PISC = B.PISC
    and P.PIIN = B.PIIN FOR XML PATH(''), type
    ).value('.', 'nvarchar(max)'),1,1,'') As CombinedDetail
    From 
    ( select TOP 100 PERCENT
        pic, pisc, piin, piisn, piidta
     from PI115AP
    order by pic, pisc, piin, piisn) B
    Group By B.PIC, B.pisc, B.piin

谢谢!

你有很多零件和部件不合适,无法按照你想要的方式工作。您的 FOR XML 不是您想要的顺序,因为子查询没有排序依据。实际结果集也不是您想要的顺序,因为主查询没有排序依据。我真的不明白 B 子查询的意义。使用 top 时,top 不会对实际结果进行排序,它只是定义要检索的行。

很确定你想要更多这样的东西。

SELECT pic
    , pisc
    , piin
    , STUFF((SELECT ' ' + P.PIIDTA 
            FROM PI115AP P
            Where P.PIC = B.PIC
                and P.PISC = B.PISC
                and P.PIIN = B.PIIN 
            order by p.pic
                , p.pisc
                , p.piin
                , p.piisn
            FOR XML PATH(''), type
    ).value('.', 'nvarchar(max)'),1,1,'') As CombinedDetail
From PI115AP B
Group By B.PIC
    , B.pisc
    , B.piin
order by b.pic
    , b.pisc
    , b.piin