使用SQL基于查询插入记录数

3

我有一张表格,其中一个字段有一个数字。根据这个数字,我想让SQL将记录插入到另一张表中。下面是第一张表的示例:

Event    Fields   Type
Swimming 3        Basic
Swimming 2        Advanced
Running  5        Basic
Running  1        Advanced

根据上表,我希望使用SQL插入以下记录:
Event    GradeType    Grade
Swimming Basic1       NULL
Swimming Basic2       NULL
Swimming Basic3       NULL
Swimming Advanced1    NULL
Swimming Advanced2    NULL
Running  Basic1       NULL
Running  Basic2       NULL
Running  Basic3       NULL
Running  Basic4       NULL
Running  Basic5       NULL
Running  Advanced1    NULL

我认为我需要使用WHILE循环,但不知道从哪里开始!非常感谢任何帮助。

2个回答

5

根本不需要循环:

INSERT INTO new_table(Event, GradeType, Grade)
SELECT Event, CONCAT(Type, n) AS [GradeType], NULL AS Grade
FROM tab
CROSS APPLY (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9)) AS n(n)
WHERE n <= Fields;

实时演示

请记住,n子查询是一个带有硬编码值的计数表。您可以使用任何其他适合的方法。相关:如何创建和填充数字表?

如果您使用的是低于2012的SQL Server版本,则需要使用+进行连接。


1
太棒了!我正在使用 while 循环编写一些解决方案 :D - 顺便说一句,没有注释 - 你是一个 SQL Server 爱好者。 - Pedram
2
对我来说太快了,我正在写几乎完全相同的答案... - Zohar Peled

1

在Lad2025的回答基础上进行补充。如果您的版本低于2012年(特别是因为不支持值子句的2005年),则可以使用以下查询。假设您有数字表,否则这里是填充它的方法。

SELECT Event,
 Type+ cast(n  as varchar(5)) AS [GradeType],
  NULL AS Grade
FROM tab t
CROSS APPLY (select n from numbers nmbr where  nmbr.n<=t.fields)  b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接