laozhou88 2009-06-04 11:08
浏览 178
已采纳

一个行列转换问题

原始数据:
语文 数学 英语
张三 85 90 95
李四 90 85 86

转换成:
张三 李四
语文 85 90
数学 90 85
英语 95 86
请问各位能用sql写出来吗?(不要写存储过程)

  • 写回答

3条回答 默认 最新

  • chengxing6666 2009-06-04 16:10
    关注

    测试例字:

    create table a(name varchar2(12),
    math number,
    englist number,chinese number);

    插入两行记录:
    张三 85 90 95
    李四 90 85 86

    转行查询语句:
    SELECT flag, MAX(李四) AS 李四, MAX(张三) AS 张三
    FROM (SELECT decode(NAME, '李四', fensu)  as 李四,
    decode(NAME, '张三', fensu) AS 张三,
    flag
    FROM (SELECT a.NAME, a.math AS fensu, 'math' AS flag
    FROM a
    UNION ALL
    SELECT a.NAME, a.englist AS fensu, 'englist' AS flag
    FROM a
    UNION ALL
    SELECT a.NAME, a.chinese AS fensu, 'chinese' AS flag FROM a) b
    ORDER BY NAME, flag, fensu)
    GROUP BY flag

    我在ORACLE是测试是没问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?