SQL實現數據行列轉換


前言:

  在日常的工作中,使用數據庫查看數據是很經常的事,數據庫的數據非常多,如果此時的數據設計是一行行的設計話,就會有多行同一個用戶的數據,查看起來比較費勁,如果數據較多時,不方便查看,為了更加方便工作中查看數據,如果可以隨時切換行列數據的顯示就好啦。

上圖詳細看這種情況:同一個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 ,就可以實現從列轉為行啦!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM