【问题标题】: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';
      

      【讨论】:

        猜你喜欢
        • 2021-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-09
        • 2018-10-23
        • 1970-01-01
        • 2017-03-22
        相关资源
        最近更新 更多