有条件地从表A插入表B

时间:2019-12-19 10:05:26

标签: sql sql-server

我有一个表A,下面的列

Name age phoneNumber
A     26 12345
B     34 87654
C     5  98765

我的输出表还包含没有数据的相同列名

我需要生成如下所述的输出表

Name age phoneNumber
A     10 12345
A     10 12345
A     6 12345
B     10 87654
B     10 87654
B     10 87654
B     4 87654
C     5  98765

就是我每次将年龄减去10直到<10岁 如果在输入表中,并且年龄小于10,则将其移动到输出表中

任何人都可以指导我如何执行此操作以获得所需的输出

1 个答案:

答案 0 :(得分:4)

这似乎是使用递归cte的好地方:

with cte as (
    select name, age, age % 10 new_age, phoneNumber, 1 i from mytable
    union all
    select name, age, 10, phoneNumber, i + 1
    from cte
    where age > i * 10
)
select name, new_age age, phoneNumber from cte order by name, age desc

Demo on DB Fiddle

name | age | phoneNumber
:--- | --: | ----------:
A    |  10 |       12345
A    |  10 |       12345
A    |   6 |       12345
B    |  10 |       87654
B    |  10 |       87654
B    |  10 |       87654
B    |   4 |       87654
C    |   5 |       98765