这是初始表:
id range val
1 -4. 2
1 -2. 1
1. 1. 1
1 3. 2
1 4. 1
2. -1. 1
2. 0. 1
2. 1. 1
更新表:
id range val
1 -4. 2
1. -3. 0
1 -2. 1
1. -1. 0
1. 0. 0
1. 1. 1
1. 2. 0
1 3. 2
1 4. 1
2. -1. 1
2. 0. 1
2. 1. 1
2. 2. 0
2 3. 0
2 4. 0
所需逻辑:
id
将有一定范围。 id
,范围的下端将有所不同,但上端将是整个表中的最大最大值。我不是SQL wiz,所以我有点迷路。任何帮助将非常感激。让我知道是否对逻辑感到困惑。
如果对于每个范围值,您至少有一个值,那么我认为您想要:
select i.id, t.range, coalesce(t.value, 0) as value
from (select distinct id from t) i cross join
(select distinct range from t where range > 0) r left join
t
on t.id = i.id and t.range = i.range
union all
select id, range, value
from t
where range <= 0;