2016-07-20 2 views
0

둘 이상의 열의 값을 기준으로 조인 된 테이블에서 올바른 값을 선택하는 방법. http://sqlfiddle.com/#!9/f92daa/2 기본 테이블 : 나는 sqlfiddle을 시작조인 된 테이블에서 오른쪽 백분위 수 선택

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 

퍼크 - 퍼크 테이블 수 있어야한다 (합류 ids) 가능한 가장 큰 값 이하 형식 열 perc1-10

표 perc은 관측 백분위 수를 저장합니다. 목표는 주 테이블에서 값을 치는 간격을 찾고 상위 대역을 가져 오는 것입니다.

답변

2

이렇게하려면 case 표현식을 사용할 수 있습니다. 이것은 perc1을 가정합니다. < perc2 < perc3 < perc4 < ... 등등. 당신이 perc 테이블 오름차순 위해 항상 값을 보관 유지하는 경우

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

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 
관련 문제