我有一个表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,则将其移动到输出表中
任何人都可以指导我如何执行此操作以获得所需的输出
答案 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
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