一个行列转换问题

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

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

测试例字:

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是测试是没问题

没有这样的sql

ORACLE 是可以的,用DECODE() 函数就可以实现