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查询的经验,所以非常感谢帮助.
试试这个
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仅用于获取数字序列.可以在运行时或另一个表生成序列,可以使用数字序列
| 归档时间: |
|
| 查看次数: |
610 次 |
| 最近记录: |