sql - 使用 SQL 插入基于 QUERY 的记录数

标签 sql sql-server tsql

我有一个表,其中的一个字段中有一个数字。基于该数字,我希望 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 来循环,但不知道从哪里开始!感谢所有帮助。

最佳答案

根本不需要循环:

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;

LiveDemo

请记住,n 子查询是具有硬编码值的计数表。您可以使用任何其他合适的方法。相关:What is the best way to create and populate a numbers table?

如果您使用低于 2012 的 SQL Sever,您需要使用 + 进行连接。

关于sql - 使用 SQL 插入基于 QUERY 的记录数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37455797/

相关文章:

php - 使用 php 根据自定义条件重新排列行

mysql - 外键与主键匹配吗?

如果表不为空,则 Mysql 左连接计数

sql - 如何在一个 ssms 实例中打开多个 .sql 文件

sql - 使用 Cases 选择 2 个表上的 UNION ALL

SQL Server批量插入抛出请求超时错误?

sql-server - 一周结束日的 SSRS 表达式是什么?

tsql - 多参数 IF 语句 - T-SQL

SQL Server 2008 : How to query all databases sizes?

sql - SqlServer Compact Edition 中的条件插入