程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> SQL語句行列轉換方法有哪些

SQL語句行列轉換方法有哪些

編輯:MySQL綜合教程

  SQL語句行列轉換的兩種方法 case...when和pivot函數應用,運用pivot 函數只支持數據庫版本2005以上的。一般運用case when else end 的方法比較多,比較普遍

  /*創建數據庫*/

  CREATE DATABASE tmp

  go

  USE tmp

  go

  /*創建數據庫測試表*/

  CREATE TABLE [Scores]

  (

  [ID] INT IDENTITY(1, 1)

  PRIMARY KEY ,

  [Student] VARCHAR(20) ,

  [Subject] VARCHAR(30) ,

  [Score] FLOAT

  )

  go

  TRUNCATE TABLE Scores

  /*插入數據庫測試數據信息*/

  INSERT INTO Scores

  ( Student, Subject, Score )

  VALUES ( 'test001', '語文', '90' )

  INSERT INTO Scores

  ( Student, Subject, Score )

  VALUES ( 'test001', '英語', '85' )

  INSERT INTO Scores

  ( Student, Subject, Score )

  VALUES ( 'text002', '語文', '90' )

  INSERT INTO Scores

  ( Student, Subject, Score )

  VALUES ( 'text002', '英語', '80' )

  INSERT INTO Scores

  ( Student, Subject, Score )

  VALUES ( 'test003', '語文', '95' )

  INSERT INTO Scores

  ( Student, Subject, Score )

  VALUES ( 'test003', '英語', '85' )

  /*1. case when .......then else ....end 用法,行列轉換*/

  SELECT Student AS '姓名' ,

  MAX(CASE Subject

  WHEN '語文' THEN Score

  ELSE 0

  END) AS '語文' ,--如果這個行是“語文”,就選此行作為列

  MAX(CASE Subject

  WHEN '英語' THEN Score

  ELSE 0

  END) AS '英語'

  FROM Scores

  GROUP BY Student

  ORDER BY Student

  /*2. pivot(聚合函數(要轉成列值的列名)

  for 要轉換的列

  in(目標列名)

  )*/

  SELECT Student AS '姓名' ,

  AVG(語文) AS '語文' ,

  AVG(英語) AS '英語'

  FROM Scores PIVOT( AVG(Score) FOR Subject IN ( 語文, 英語 ) )as NewScores

  GROUP BY Student

  ORDER BY Student ASC

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved