2016-07-20 2 views
0

Как выбрать правильное значение из объединенной таблицы на основе значения в более чем одном столбце. Я начал sqlfiddle: http://sqlfiddle.com/#!9/f92daa/2 Главный стол:Выберите правый процентиль из объединенной таблицы

id val 
1 1 
2 4 
3 67 
4 78 
5 22 

Дата вылета:

obs_id perc1 perc2 perc3 perc4 perc5 perc6 perc7 perc8 perc9 perc10 
1 1 2 3 4 5 6 7 8 9 10 
2 1 2 3 4 5 6 7 8 9 10 
3 10 20 30 40 50 60 70 80 90 100 
4 10 20 30 40 50 60 70 80 90 100 
5 10 20 30 40 50 60 70 80 90 100 

Ожидаемый результат должен быть:

id val perc 
1 1 1 
2 4 4 
3 67 70 
4 78 80 
5 22 30 

перхлорэтилена - должно быть число от PERC таблицы (присоединились ids) не более, чем максимально возможное значение формы столбцов perc1-10

Таблица perc хранит процентили наблюдений. Цель состоит в том, чтобы найти, какой интервал попал в значение из главной таблицы и взять верхнюю полосу.

ответ

2

Вы можете использовать выражение case, чтобы сделать это. Это предполагает perc1 < perc2 < perc3 < perc4 < ... и так далее.

SELECT obs.id, obs.val, 
case when val <= perc1 then perc1 
    when val <= perc2 then perc2 
    when val <= perc3 then perc3 
    when val <= perc4 then perc4 
    when val <= perc5 then perc5 
    when val <= perc6 then perc6 
    when val <= perc7 then perc7 
    when val <= perc8 then perc8 
    when val <= perc9 then perc9 
    when val <= perc10 then perc10 
    end 
perc 
FROM obs 
INNER JOIN perc 
ON obs.id = perc.obs_id 

SQL Fiddle

0

Если вы уверены, что perc таблица будет иметь всегда значения в восходящих порядка then

select 
a.id, a.val, 

case 
when b.perc1 >= a.val then b.perc1 
when b.perc2 >= a.val then b.perc2 
when b.perc3 >= a.val then b.perc3 
when b.perc4 >= a.val then b.perc4 
when b.perc5 >= a.val then b.perc5 
when b.perc6 >= a.val then b.perc6 
when b.perc7 >= a.val then b.perc7 
when b.perc8 >= a.val then b.perc8 
when b.perc9 >= a.val then b.perc9 
when b.perc10 >= a.val then b.perc10 
end as perc 

from idval a , perc b 
where a.id = b.obs_id 
Смежные вопросы