回答

收藏

T-SQL:交叉应用;订单项上的迭代次数过多

技术问答 技术问答 201 人阅读 | 0 人回复 | 2023-09-12

一些严重的分解Xml之后,我几乎满足了我的需求-但在检查了结果后,我发现在分析的一部分,我不能轻易地解决每个子标题的所有细节模式-
: A) t4 S1 U. y+ }8 V) v3 e因此,我没有为所有订单项写三个记录,而是为每个子项目写三个订单项-
' y/ V8 A0 ?& l. F假设我有两个。我有六个。!:-(我在下面的代码中将模式提炼成通用标头/子标头/详细信息关系模型。
3 _: L' {" x* z+ e                DECLARE @MetroXML xml    SET @MetroXML =    '       Conoco       ORD-1111                          Dallas          BOL-2213                               Diesel            7600.00                                                              Fort Worth          BOL-2216                               Ethanol            1852.00                                Unleaded            900.00                                     ';    INSERT INTO [scratch].GenericHeader     SELECT T.c.value('col1[1]','varchar(10)') AS 'col         T.c.value('col2[1]','varchar(10)') AS 'col        FROM @MetroXML.nodes('/Header') T(c);    INSERT [scratch].GenericSubHeader     (id,col1,col2)    SELECT       h.id,     n.x.value('col1[1]','varchar(10)') AS 'col      n.x.value('col2[1]','varchar(10)') AS 'col      FROM [scratch].GenericHeader h      CROSS APPLY @MetroXML.nodes('/Header/SubHeaders/SubHeader') n(x);     INSERT [scratch].GenericDetail     (id,subid,col1,col2)       SELECT        s.id,      s.subid,      n.x.value('col1[1]','varchar(10)') AS 'col        n.x.value('col2[1]','varchar(10)') AS 'col      FROM [scratch].GenericSubHeader s      CROSS APPLY @MetroXML.nodes('/Header/SubHeaders/SubHeader/Details/Detail') as n(x);     select * from [scratch].GenericHeader      where id =       select * from [scratch].GenericSubHeader      where id =       select * from [scratch].GenericDetail      where id = 24;注意:id,subid,detid被定义为INT IDENTITY(1,1)结果7 ?; z  H! c8 f* W6 N; r/ _
我得到的是:4 c( l/ Q/ Y; u& }; A( J2 y7 J
id|subid|detid|col1     |col2--------------------------------24|44   |22   |Diesel   |7600.0024|44   |23   |Ethanol  |1852.0024|44   |24   |Unleaded |900.0024|48   |25   |Diesel   |7600.0024|48   |26   |Ethanol  |1852.0024|48   |27   |Unleaded |900.00我想要什么:9 p6 z4 A& w6 I, U
id|subid|detid|col1     |col2--------------------------------24|44   |22   |Diesel   |7600.0024|48   |23   |Ethanol  |1852.0024|48   |24   |Unleaded |900.0000                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
+ P4 _' X: X7 |2 V3 r    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则