Oracle 中某表有两字段UserName,Lev  SELECT 'Loroe' UserName, '团长' Lev  FROM DUAL
UNION ALL
SELECT 'Dance' UserName, '连长' Lev   FROM DUAL
UNION ALL
SELECT 'Nanlar' UserName, '排长' Lev  FROM DUAL
如何查询出 以Lev值为字段的 单条记录,如下结果:-----------------------
团长   连长     排长
Loroe  Dance    Nanlar
------------------------查出来的结果: 团长 连长 排长 是 字段,Loroe  Dance    Nanlar为值。麻烦高手们路过帮帮忙
非常非常感谢!

解决方案 »

  1.   

    SELECT MAX(DECODE(LEV, '团长', USERNAME)) 团长,
           MAX(DECODE(LEV, '连长', USERNAME)) 连长,
           MAX(DECODE(LEV, '排长', USERNAME)) 排长
      FROM (SELECT 'Loroe' USERNAME, '团长' LEV
              FROM DUAL
            UNION ALL
            SELECT 'Dance' USERNAME, '连长' LEV
              FROM DUAL
            UNION ALL
            SELECT 'Nanlar' USERNAME, '排长' LEV FROM DUAL);
      

  2.   

    行列转换表达式,用于在极大表中减少记录,用列的增加来换取行的减少,以提高表查询的效率case whenor decode如下:
    SELECT max(case when LEV='a' then USERNAME else null end) a,
    max(case when LEV='b' then USERNAME else null end) b,
    max(case when LEV='c' then USERNAME else null end) c
      FROM (SELECT 'Loroe' USERNAME, 'a' LEV
              FROM DUAL
            UNION ALL
            SELECT 'Dance' USERNAME, 'b' LEV
              FROM DUAL
            UNION ALL
            SELECT 'Nanlar' USERNAME, 'c' LEV FROM DUAL);
      

  3.   

    select 
    (SELECT 'Loroe' FROM DUAL ) 团长,
    (SELECT 'Dance' FROM DUAL ) 连长,
    (SELECT 'Nanlar' from DUAL ) 排长
      

  4.   

    case when 和 decode是一样的效果 
    但是 对于不定行转列 就不行啦
      

  5.   

    关注ing,我也遇到了这个问题。