【问题标题】:Sql insert into table using LoopSql使用循环插入表
【发布时间】:2021-09-21 13:02:50
【问题描述】:

我有这个数据集:

运行此查询后得到的结果:

SELECT  
MachineEquioement.NumMachine
,Equipements.Nom as 'Equipement'
,MachineEquioement.QTE
FROM MachineEquioement
inner join Equipements on Equipements.NumEquipement = MachineEquioement.NumEquipement
order by NumMachine

我想要的结果如下:

NumMachine || Equipement
1          || Moteur N° 1
1          || Accouplement avec caoutchouc N° 1
1          || Accouplement avec caoutchouc N° 2
1          || Palier P216 N° 1
1          || Palier P216 N° 2

有人对此有好主意吗?有可能吗?

【问题讨论】:

  • 请只标记您真正使用的RDBMS/至于您的问题,这与While Loops有什么关系?为什么您想要在 SQL 中使用 While 循环,这是一种基于集合的语言?
  • QTE 的最大值是多少?
  • 我需要循环每行的 QTE 列值以获得我想要的结果
  • 如果你在 SQL 中写一个循环,你很可能做错了。很少有时候你应该在 SQL 中使用它们。但是,有一些基于集合的方法,但它们的实现是特定于 RDBMS 的,我们不知道您使用的是哪一种。
  • 您不需要 while 循环。无论后端是什么,在大多数 SQL 数据库中,您都可以使用计数表来连接。

标签: sql while-loop


【解决方案1】:

这是你想要达到的目标吗?

;WITH  cte
                        as (  select MachineEquioement.NumMachine,Equipements.Nom ,QTE
                        
                           FROM MachineEquioement
                            INNER join Equipements on Equipements.NumEquipement = MachineEquioement.NumEquipement
                            WHERE  QTE >0
                            union all
                            select  MachineEquioement.NumMachine,Equipements.Nom ,QTE -1 
                              from     cte
                            WHERE  QTE >1
                            
                            ) 

SELECT  
NumMachine
,Nom as 'Equipement'
,QTE
FROM cte
order by NumMachine option (maxrecursion 0)

【讨论】:

  • 2注:1.;是一个声明终结者;它位于 all 您的语句的末尾,而不是需要正确终止 previous 语句的语句的开头。 2.随着QTE值的增长,这里的性能会明显变差。
  • 同意。但如果他需要生成与 QTE 一样多的行,这是一个简单的选择
  • 是否有任何错误或不同的输出?如果您可以与数据共享示例脚本,那么最好共享所需输出的确切查询
  • 同意。但如果他/她需要生成与 QTE 一样多的行,这是一个简单的选择。我想这会更好:)
猜你喜欢
  • 1970-01-01
  • 2019-02-06
  • 1970-01-01
  • 2015-03-16
  • 1970-01-01
  • 2020-02-08
  • 2015-02-13
  • 2019-11-14
  • 2015-05-11
相关资源
最近更新 更多