【问题标题】:Selecting dynamic column in oracle在oracle中选择动态列
【发布时间】:2018-03-12 21:41:02
【问题描述】:
表用户详细信息
Username Department
user1 dept2
user2 dept3
user3 dept4
餐桌部门
dept1 dept2 dept4 dept3 amount region city
hello bye tc tata 500 pakistan lahore
现在如果我选择“user1”输出应该是这样的
dept2 dept4 dept3 amount region city
bye tc tata 500 pakistan lahore
现在如果我选择“user3”输出应该是这样的
dept4 amount region city
tc 500 pakistan lahore
【问题讨论】:
标签:
mysql
sql
oracle
plsql
plsqldeveloper
【解决方案1】:
你的设计不是真正的关系..
通常,DEPARTNEMT 表由部门 ID(主键)和其他属性组成。
此外,查询返回的列数始终相同,因此不可能返回一次六列和四列的其他值。
无论如何,如果部门表只有一行,你可以这样做
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
根据需要添加基于此架构的其他列。
【解决方案2】:
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';