2016-08-18 2 views
0
내 필요에 유용한 쿼리를 만들어

:PostgreSQL의 CASE

select distinct min(term1_id), term2_id, 
     case when distance = 0 then term2_id end as dist0, 
     case when distance = 1 then term2_id end as dist1, 
     case when distance = 2 then term2_id end as dist2, 
     case when distance = 3 then term2_id end as dist3, 
     case when distance = 4 then term2_id end as dist4, 
     case when distance = 5 then term2_id end as dist5, 
     case when distance = 6 then term2_id end as dist6, 
     case when distance = 7 then term2_id end as dist7, 
     case when distance = 8 then term2_id end as dist8, 
     case when distance = 9 then term2_id end as dist9, 
     case when distance = 10 then term2_id end as dist10, 
     case when distance = 11 then term2_id end as dist11, 
     case when distance = 12 then term2_id end as dist12, 
     case when distance = 13 then term2_id end as dist13, 
     case when distance = 14 then term2_id end as dist14, 
     case when distance = 15 then term2_id end as dist15 
from graph_path 
group by term2_id, distance 
order by term2_id; 

그것은 "행"의 결과를 반환 넣어 같은 :

Term1_id dist0 dist1 dist2 
1   1 
1    5 
1    118 
1    12823 
1    40006 
1      6 
1      7 

내가 모든 것을 넣을 수있는 방법을 이 한 줄에?

Term1_id dist 0 dist1 dist2 
    1  1  5  6 
    1  118 7  etc... 

압축 할 수있는 방법이 있습니까? 각 dist에 대한 행을 만드는 대신?

+0

해당 DISTINCT가 필요하지 않으므로 GROUP BY는 중복을 반환하지 않습니다. ' – jarlh

답변

1

사용 집계 : 쿼리의 논리를 바탕으로

select term1_id, 
     max(case when distance = 0 then term2_id end) as dist0, 
     max(case when distance = 1 then term2_id end) as dist1, 
     max(case when distance = 2 then term2_id end) as dist2, 
     max(case when distance = 3 then term2_id end) as dist3, 
     max(case when distance = 4 then term2_id end) as dist4, 
     max(case when distance = 5 then term2_id end) as dist5, 
     max(case when distance = 6 then term2_id end) as dist6, 
     max(case when distance = 7 then term2_id end) as dist7, 
     max(case when distance = 8 then term2_id end) as dist8, 
     max(case when distance = 9 then term2_id end) as dist9, 
     max(case when distance = 10 then term2_id end) as dist10, 
     max(case when distance = 11 then term2_id end) as dist11, 
     max(case when distance = 12 then term2_id end) as dist12, 
     max(case when distance = 13 then term2_id end) as dist13, 
     max(case when distance = 14 then term2_id end) as dist14, 
     max(case when distance = 15 then term2_id end) as dist15 
from graph_path 
group by term1_id 
order by term1_id; 

, 나는 당신이 실제로 term1_id으로 집계 할 생각합니다.

+0

완벽한 감사합니다! – xCloudx8