基于条件SQL复制行

use*_*335 4 sql database sql-server database-table

我有一张看起来像这样的桌子

+-------+------+------+----------+ 
| Index |  F1  |  F2  | Multiply | 
+-------+------+------+----------+
|  0    |  LG  |  SC  |     1    |
|  1    |  WE  |  CC  |     1    |
|  2    |  TY  |  PL  |     2    |
+-------+------+------+----------+
Run Code Online (Sandbox Code Playgroud)

我想将'乘法'列乘以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  |
+------+-----+-----+
Run Code Online (Sandbox Code Playgroud)

我没有太多写SQL查询的经验,所以非常感谢帮助.

uzi*_*uzi 7

试试这个

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'
Run Code Online (Sandbox Code Playgroud)

编辑:添加一些描述

通过编写类似的查询

select * from table 
cross join (values (1),(2)) t(n)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 你能否为这个答案添加一些解释.这将是非常有帮助的. (2认同)