如何通过加入和使用 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
我有一个母版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