create table tq84_range (
range_id number not null,
range_seq number not null,
min_ number not null,
max_ number,
factor number not null,
--
primary key (range_id, range_seq)
);
insert into tq84_range values (1, 1, 0, 10, 1.0);
insert into tq84_range values (1, 2, 10, 100, 1.5);
insert into tq84_range values (1, 3,101,null, 2.5);
insert into tq84_range values (2, 1, 0, 18, 1.0);
insert into tq84_range values (2, 2, 19,null, 2.0);
create table tq84_application (
app_id number not null,
raw_value number not null,
range_id number not null,
primary key (app_id)
);
insert into tq84_application values (1, 20.0, 1);
insert into tq84_application values (2, 25.0, 2);
insert into tq84_application values (3, 18.5, 2);
您想要使用left join
。
有了這樣一個左連接,可以確保左 表的每個記錄(在 select語句文本之前left join
出現的表),將至少有一次回來, 即使where條件沒有按在右表中找不到記錄 。
如果tq84_range.range is null
那麼你知道加入 條件沒有在tq84_range中找到記錄,因此 似乎是一個缺口。所以你打印Missing:
。
由於tq84_application.max_
可以null
和空似乎 表示無窮或上限你測試上限 與nvl(tq84_range.max_, tq84_application.raw_value
因此,select語句會變成這樣:
select
case when tq84_range.range_id is null then 'Missing: '
else ' '
end,
tq84_application.raw_value
from
tq84_application left join
tq84_range
on
tq84_application.range_id = tq84_range.range_id
and
tq84_application.raw_value between
tq84_range.min_ and nvl(tq84_range.max_, tq84_application.raw_value);
'我不需要sql本身,只是一些指向這個方法的指針。' – 2011-12-19 22:27:27
有些事情更容易用SQL來說明然後用英文拼寫出來。 – Sparky 2011-12-19 22:29:49
這也包括範圍內的值。對於範圍「1 - 10」和「11 - 20」,我只需要那些介於10和11之間的值。所以我想'10.5'但不是'5'。 – Nivas 2011-12-19 22:35:35