sql 循环插入数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 循环插入数据相关的知识,希望对你有一定的参考价值。
有一个学生表,字段有学号,
有一个考点表,字段为考点代码
要在考生报名表中插入学生报名记录,报名的科目是1808,要求给考点表中每个考点报名200个不同的学生,科目都是这个科目
考生报名表是另外一个表,这个语句共有3个表,急求帮助
貌似没那么麻烦吧
我是以一共5个人,分到两个考场,其中一个分三人,一个分两人
create table 学生(学号 varchar(10))
insert into 学生 values (\'01\')
insert into 学生 values (\'02\')
insert into 学生 values (\'03\')
insert into 学生 values (\'04\')
insert into 学生 values (\'05\')
create table 考点
(考点代码 varchar(2))
insert into 考点 values (\'a\')
insert into 考点 values (\'b\')
create table 考生报名
(学号 varchar(10),
考点代码 varchar(2),
科目 varchar(4))
执行
insert into 考生报名select 学号,考点代码,\'1808\' from
(SELECT 学号,考点代码,row_number() over (order by 学号)%(select count(*) from 考点) rn FROM 学生,考点) t
where rn=1
最后考生报名里结果
这个基本属于平均分配,不是你说的每个考场200,如果考生1000人,考场4个的人,你要怎么办?
还有考生1000人,10个考场的话怎么办?
如果存在上述情况,请详细说明
追问我在sql2005上执行你的代码,执行结果怎么是这样啊?
你吧,肯定中间有不一致的地方,查收下,浏览器右上角
insert into 考生报名
select 学号,考点代码 ,\'1806\'from
(SELECT 学号,考点代码,row_number() over (order by 考点代码)%(select count(*) from 考点) rn FROM 学生,考点) t
where rn=1
Sql使用循环插入表
【中文标题】Sql使用循环插入表【英文标题】:Sql insert into table using Loop 【发布时间】: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 数据库中,您都可以使用计数表来连接。
【参考方案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 一样多的行,这是一个简单的选择。我想这会更好:)以上是关于sql 循环插入数据的主要内容,如果未能解决你的问题,请参考以下文章