/*纵表转横表*/
-
CREATE GLOBAL TEMPORARY TABLE test2
-
(
-
uname VARCHAR2(10),
-
subject VARCHAR2(10),
-
score NUMBER
-
);
-
INSERT INTO test2 VALUES('王五','语文',80);
-
INSERT INTO test2 VALUES('李四','语文',90);
-
INSERT INTO test2 VALUES('李四','数学',80);
-
INSERT INTO test2 VALUES('李四','英语',70);
-
INSERT INTO test2 VALUES('张三','语文',80);
-
INSERT INTO test2 VALUES('张三','数学',80);
-
INSERT INTO test2 VALUES('张三','英语',90);
SELECT * FROM test2;
-
SELECT
-
t.uname AS 姓名,
-
SUM(CASE t.subject WHEN '语文' THEN t.score END)AS 语文,
-
SUM(CASE t.subject WHEN '数学' THEN t.score END)AS 数学,
-
SUM(CASE t.subject WHEN '英语' THEN t.score END)AS 英语
-
FROM test2 t
-
GROUP BY t.uname;
/*横表转纵表 */
-
CREATE GLOBAL TEMPORARY TABLE test4
-
(
-
uname VARCHAR2(10),
-
chinese NUMBER,
-
math NUMBER,
-
english NUMBER
-
);
-
INSERT INTO test4 VALUES('张三',80,90,70);
-
INSERT INTO test4 VALUES('李四',90,85,95);
-
INSERT INTO test4 VALUES('王五',88,75,90);
SELECT * FROM test4;
-
SELECT * FROM (
-
SELECT t.uname,'chinese' AS subject,t.chinese AS score FROM test4 t
-
UNION ALL
-
SELECT t.uname,'math' AS subject,t.math AS score FROM test4 t
-
UNION ALL
-
SELECT t.uname,'english' AS subject,t.english AS score FROM test4 t
-
UNION ALL
-
SELECT t.uname,'平均分' AS subject,CAST((t.chinese+t.math+t.english)*1.0/3 AS DECIMAL(18,2)) AS score FROM test4 t
-
UNION ALL
-
SELECT t.uname,'总分' AS subject,(t.chinese+t.math+t.english) AS score FROM test4 t
-
)tb
-
ORDER BY uname,
-
case tb.subject
-
when 'chinese' then 1
-
when 'math' then 2
-
when 'english' then 3
-
when '平均分' then 4
-
when '总分' then 5
-
END
添加上计算总分和平均分
SQL语句最后加上case相当于排序。