目錄
1.行轉列,列轉行
場景1:報表統計,彙總顯示
- 1.報表統計
- 2.彙總顯示
練習:
實現的方法:
- 1.使用自連接的方式實現行轉列(效率不高,複雜,難擴展)
還有一個是統計每個學生所有課程的總成績:首先最先想到的是查詢到每個學生所有課程的總和。
SELECT b.STUDENT_NAME,SUM(a.CORE)
FROM hand_student_core a
RIGHT JOIN hand_student b ON a.STUDENT_NO=b.STUDENT_NO
GROUP BY b.STUDENT_NO
然後實現行轉列
SELECT * FROM(
SELECT SUM(a.CORE) AS 張三 FROM hand_student_core a JOIN hand_student b ON a.STUDENT_NO=b.STUDENT_NO
WHERE b.STUDENT_NAME='張三') a
CROSS JOIN (
SELECT SUM(a.CORE) AS 李四 FROM hand_student_core a JOIN hand_student b ON a.STUDENT_NO=b.STUDENT_NO
WHERE b.STUDENT_NAME='李四') b
CROSS JOIN (
SELECT SUM(a.CORE) AS 吳鵬 FROM hand_student_core a JOIN hand_student b ON a.STUDENT_NO=b.STUDENT_NO
WHERE b.STUDENT_NAME='吳鵬') c
- 2.使用case來行轉列。
SELECT SUM(CASE WHEN STUDENT_NAME='張三' THEN CORE END ) AS 張三,
SUM(CASE WHEN STUDENT_NAME='李四' THEN CORE END) AS 李四,
SUM(CASE WHEN STUDENT_NAME='吳鵬' THEN CORE END) AS 吳鵬
FROM hand_student_core a JOIN hand_student b on a.STUDENT_NO=b.STUDENT_NO
場景二:還有一種行轉列的形式是一列轉換爲多行,比如:
方式一:使用序列表的方式完成行列轉換。
首先生成一個序列號表,就一個自增id字段
初始化序列表:就是一個整數序列
結果:
分析:子查詢sql
行數根據size來決定
場景三:
一個一個的顯示,再union:
2.如何生成唯一序列號
場景:
第一種方式需要允許序列空洞的存在,因爲數據庫回滾了以後就會出現空洞
3.如何刪除重複數據
判斷用戶名是否有重複: