前言:
在日常的工作中,使用數據庫查看數據是很經常的事,數據庫的數據非常多,如果此時的數據設計是一行行的設計話,就會有多行同一個用戶的數據,查看起來比較費勁,如果數據較多時,不方便查看,為了更加方便工作中查看數據,如果可以隨時切換行列數據的顯示就好啦。
上圖詳細看這種情況:同一個test學生,有多門學科的成績,每科成績為一行,如果學生比較多的時候,這樣一行一個成績,是不是覺得查看比較麻煩呢?可不可以將所有學科的成績都放到同一行呢?答案是肯定的!!
最終要實現的效果:
如下圖的最終實現結果,自定義了各個科目來存放成績,要實現這種效果,就需要加個條件去判斷當前科目和獲取到成績,可以使用IF或case when 去判斷
第一種:IF + 分組 +MAX/SUM
逐步分析為什么要這么寫?
- 使用IF根據科目來進行篩選,如果當前為linux,直接取它的分數,其他為0,可以看到test學生的linux列中,只有第一行有分數,其他兩行都為0,這樣就可以先獲得和預期結果比較相應的顯示樣式了
- 接着分析此時顯示結果,以各個科目進行分類了,由於表中存在多個學生,需要一個以同一個學生為分組,使用group by進行分組
- 分組后,使用MAX在同一個組里 取大值 或 SUM求和
如圖中的test的三行內容是屬於同一個組別的,在這一組中求最大值
最終的SQL和效果:
第二種:使用CASE WHEN ...THEN ..ELSE... +MAX/SUM
步驟說明:這里的步驟的道理與IF的相同,先用case..when按照各個科目進行分列,然后按照同一個同學進行分組,再使用MAX或SUM ,就可以實現從列轉為行啦!