假设有以下数据:
公司 部门 部长姓名
-----------------------------------
AAA 01 Name1
AAA 02 Name2
AAA 03 Name3
BBB 01 Name4
BBB 03 Name5
CCC … …
已知(公司+部门)为主键,且部门只有01、02、03三种,现需要得到以下报表:
公司 部门01的部长姓名 部门02的部长姓名 部门03的部长姓名
------------------------------------------------------------------------
AAA Name1 Name2 Name3
BBB Name4 无此部门 Name5
CCC …
    请试用一个SQL语句完成以上数据的检索。

解决方案 »

  1.   

    行转列,简单, sqlserver:
    select 公司, 
           max(case when 部门 = '01' then 部长姓名 end) as 部门01的部长姓名
           max(case when 部门 = '02' then 部长姓名 end) as 部门02的部长姓名
           max(case when 部门 = '03' then 部长姓名 end) as 部门03的部长姓名
    from 表
    group by 公司
      

  2.   

    如果是ora,把case when 换成decode即可
      

  3.   

    select 公司, 
    max(decode(decode(部门,'01',部长姓名),null,'无此部门',decode(部门,'01',部长姓名))) as 部门01的部长姓名,
    max(decode(decode(部门,'02',部长姓名),null,'无此部门',decode(部门,'02',部长姓名))) as 部门02的部长姓名,
    max(decode(decode(部门,'03',部长姓名),null,'无此部门',decode(部门,'03',部长姓名))) as 部门03的部长姓名
    from 表
    group by 公司
      

  4.   

    执行出错:ORA-00907:missing right parenthesis还有那个公司我是不是可以随便起一个名字?
      

  5.   

    有一个问题:
    最外层的那个decode 怎么用的?能否讲解一下? 结果是对的,但是就是不明白最外层的decode 是怎么回事?呵呵~~