我有这样的桌子

rateId  gender  Age
HV1     M       0
HV1     M      12
HV1     M      50
HV1     F      0
HV1     F      20
HV1     F      50

我想为每个性别的所有rateId创建一个年龄段。如果不再有年龄上限,则可以是100岁。
所以我的结果必须是:
rateId  gender  AgeLow  AgeHigh
HV1     M       0       12
HV1     M       12      50
HV1     M       50      100
HV1     F       0       20
HV1     F       20      50
HV1     F       50      100

我认为使用by分区或类似的方法是可能的,但是我找不到如何使用它。

最佳答案

您可以尝试使用LEAD窗口功能。

SELECT  t1.rateId,
        t1.gender,
        t1.Age AgeLow,
       LEAD(t1.Age,1,100) over(partition by t1.rateId,t1.gender order by t1.Age) AgeHigh
FROM T t1

SQL DEMO

关于sql - 如何从Oracle中的不同行创建年龄段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52373751/

10-11 03:21