我有一个主表,每个键有一行,一个详细信息表,每个键有很多行,序列字段有一个描述字段,我需要连接在一起,每个键创建一行。我的代码做得很好,但详细数据行没有正确顺序的连接数据。数据在Excel电子表格中传递给我,我使用导入向导将数据添加到数据库。由于详细数据中的顺序不正确,我添加了一个子选择按键和序列号对数据进行排序,该序列号是STUFF WITH XML PATH的输入。我仍然以错误的顺序获取数据。如果我先对电子表格中的数据进行排序,然后将其加载到数据库,则可以正常工作。我真的需要这个动态工作,因为我想将它分发给我的团队,我们可以将它用于不同的表。关于为什么使用STUFF FOR XML PATH选择子选项不起作用的任何想法?我该怎么做我需要的东西?
这是我的代码:
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
谢谢!
答案 0 :(得分:0)
你有很多不合适的零件和零件可以按照你想要的方式工作。您的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