基于条件的重复行 SQL[英] Duplicate a Row Based on a Condition SQL

本文是小编为大家收集整理的关于基于条件的重复行 SQL的处理方法,想解了基于条件的重复行 SQL的问题怎么解决?基于条件的重复行 SQL问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

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

+-------+------+------+----------+ 
| 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.因此,我们需要乘以列Multiply的2值,并与数字序列(0,1,2,3,4,5,6,7 ...)连接,其中数字小于计算值.例如,对于Multiply = 2,连接条件将为4个数字(0、1、2、3),小于2*2.这4个数字将四倍的初始行.

master.dbo.spt_values仅用于获取数字序列.可以在运行时或其他具有数字序列的表生成序列

其他推荐答案

另一种方法是使用递归CTE:

;WITH cte AS (
    SELECT *
    FROM (VALUES
    (0, 'LG', 'SC', 1),
    (1, 'WE', 'CC', 1),
    (2, 'TY', 'PL', 2)
    ) as t([Index], F1, F2, Multiply)
), final AS (
    SELECT  [Index], 
            F1, 
            F2, 
            Multiply*2 as Multiply 
    FROM cte  -- At first we get basic recordset with x2 in Multiply
    UNION ALL 
    SELECT  [Index], 
            F1, 
            F2, 
            Multiply-1
    FROM final  -- On each iteration we select columns we need and
    WHERE Multiply-1 > 0   -- use Multiply as counter
)

SELECT  [Index], 
        F1, 
        F2
FROM final
ORDER by [Index]

输出:

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

(8 rows affected)

本文地址:https://www.itbaoku.cn/post/1794015.html