sql - 根据条件 SQL 复制行

标签 sql sql-server database database-table

我有一个看起来像这样的表

+-------+------+------+----------+ 
| Index |  F1  |  F2  | Multiply | 
+-------+------+------+----------+
|  0    |  LG  |  SC  |     1    |
|  1    |  WE  |  CC  |     1    |
|  2    |  TY  |  PL  |     2    |
+-------+------+------+----------+

我想将“相乘”列乘以 2 以确定要添加到结果中的行数。对于上面的示例,我希望我的 SQL 查询返回:

+------+-----+-----+
|Index | F1  | F2  |
+------+-----+-----+
|  0   |  LG | SC  | 
|  0   |  LG | SC  |
|  1   |  WE | CC  |
|  1   |  WE | CC  |
|  2   |  TY | PL  |
|  2   |  TY | PL  |
|  2   |  TY | PL  |
|  2   |  TY | PL  |
+------+-----+-----+

我没有太多编写 SQL 查询的经验,因此非常感谢您的帮助。

最佳答案

试试这个

with myTable as (
    select * from (values 
        (0,'LG','SC',1)
        ,(1,'WE','CC',1)
        ,(2,'TY','PL',2)
    ) t ([Index], F1, F2, Mutiply)
)
select
    [Index], F1, F2
from
    myTable m
    join master.dbo.spt_values v on m.Mutiply * 2 > v.number
where
    Type = 'P'

编辑:添加一些描述

通过编写如下查询

select * from table 
cross join (values (1),(2)) t(n)

我们可以将表格中的行加倍。并且 cross join (values (1),(2),(3),(4)) t(n) 会将行增加四倍。在这种情况下,行乘法将取决于列 Multiply。所以我们需要乘以 2 列的值 Multiply 并用数字序列 (0,1,2,3,4,5,6,7...) 连接表,其中数字较小比计算值。例如,对于 Multiply = 2,连接条件将为 4 个小于 2*2 的数字(0、1、2、3)。这 4 个数字将使初始行翻四倍。

master.dbo.spt_values 仅用于获取数字序列。可以在运行时生成序列,也可以使用另一个带有数字序列的表

关于sql - 根据条件 SQL 复制行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48557731/

相关文章:

mysql - SQL查询返回重复项

mysql - 使用另一个表的子结果进行查询

sql - 明年的总金额 mssql

sql - 用于 BETWEEN 的日期列上的非聚集索引

database - 使用事务从数据库中安全删除 Django 模型

sql - 在另一个表 SQL Server 2008 中使用来自 SELECT 的 UPDATE 语句覆盖 ID 值

sql - 在 Postgres 中整理的目的

SQL:返回条件为真的行组

iphone - 下载 iOS SDK 应用程序

php - 从 MySQL 重新创建数据库结构