根据属性值将单行动态转换为多行

时间:2018-02-15 21:13:14

标签: sql sql-server tsql

我需要帮助sql查询根据属性值

动态地将单个记录转换为多个

数据如下所示

A            B             C

0            100          10

输出应为,D列基于B / C,即10次迭代。迭代次数不固定,可以是任意数字,因此根据B和C的值,输出可以是3行,10行,100或1000或10000。

A   B   C   D

0   100  10  10
0   100  10  20
0   100  10  30
0   100  10  40
0   100  10  50
0   100  10  60
0   100  10  70
0   100  10  80
0   100  10  90
0   100  10  100

请告知。

2 个答案:

答案 0 :(得分:3)

Declare @t table (A  INT, B INT, C INT);
INSERT INTO @t Values ( 0 , 100 , 10);

SELECT *
FROM @t t 
 CROSS APPLY (
                SELECT TOP (t.B / t.c) 
                        t.c * ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) D
                FROM master..spt_values x CROSS JOIN master..spt_values y
            ) c;

答案 1 :(得分:0)

您可以使用WITH numbers AS ( SELECT a,b,c, C AS Number FROM Table1 UNION ALL SELECT a,b,c, Number + b/c FROM Numbers WHERE Number + b/c <= b ) SELECT * FROM numbers

{{1}}