2017-10-01 25 views
0

オラクル

Username Department 
user1  dept2 
user2  dept3 
user3  dept4 

userdetail表部門

dept1 dept2 dept4 dept3  amount  region  city 
hello bye  tc  tata  500   pakistan lahore 

で動的な列を選択すると、今すぐその

dept2 dept4 dept3 amount region  city 
bye  tc  tata 500  pakistan  lahore 

ようにする必要があります"user3"の出力はそのようになります

dept4 amount region city 
tc  500  pakistan lahore 

答えて

0
select a.username, b.Department, b.amount, b.region, b.city 
from userdetail a inner join 
(
select 'dept1' as Department, dept1 as dept, amount, region, city 
from department 
union all 
select 'dept2' as Department2,dept2 as dept2, amount, region, city 
from department 
union all 
select 'dept3' as Department3,dept3 as dept3, amount, region, city 
from department 
union all 
select 'dept4' as Department4,dept4 as dept4, amount, region, city 
from department 
) b on (a.department=b.Department) 
where a.username= 'user1'; 
1

あなたのデザインは本当に関係ない..です 通常DEPARTNEMTの表は、部門ID(主キー)とather属性で構成されています。

また、クエリでは常に同じ数の列が返されるため、ather値に6列と4列を一度戻すことはできません。必要に応じて部門表には1行しか持っている場合、あなたはこの

select u.Username, 
decode(u.Department,'dept2',d.dept2,'dept3',d.dept3, 'dept4',d.dept4) dept, 
decode(u.Department,'dept2',d.amount,'dept3',d.amount, 'dept4',d.amount) amount 
from userdetail u 
cross join department d 
where u.Username = 'user1' 

USERNAME DEPT  AMOUNT 
-------- ---- ---------- 
user1 bye   500 

ような何かを行うことがとにかく

は、このスキーマに基づいて他の列を追加します。