普通行列转换

例子如下:
 
假设有张学生成绩表(tb)如下:
姓名           课程            分数
 
---------------------------------------
张三           语文            74
张三           数学            83
张三           物理            93
李四           语文            74
李四           数学            84
李四           物理            94
 
--------------------------------------
想变成(得到如下结果):
姓名       语文       数学      物理
--------------------------------------------
李四         74          84         94
张三         74          83         93
--------------------------------------------

首先建表

  
  
  
  
  1. CREATE TABLE tb(姓名 VARCHAR(10) , 课程 VARCHAR(10) , 分数 INT)  
  2. INSERT INTO tb VALUES('张三' , '语文' , 74)  
  3. INSERT INTO tb VALUES('张三' , '数学' , 83)  
  4. INSERT INTO tb VALUES('张三' , '物理' , 93)  
  5. INSERT INTO tb VALUES('李四' , '语文' , 74)  
  6. INSERT INTO tb VALUES('李四' , '数学' , 84)  
  7. INSERT INTO tb VALUES('李四' , '物理' , 94)  
  8. GO 

 

SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)

  
  
  
  
  1. SELECT 姓名 as 姓名,  
  2. MAX(CASE 课程 WHEN '语文' THEN 分数 ELSE 0 END) 语文,  
  3. MAX(CASE 课程 WHEN '数学' THEN 分数 ELSE 0 END) 数学,  
  4. MAX(CASE 课程 WHEN '物理' THEN 分数 ELSE 0 END) 物理  
  5. FROM tb  
  6. GROUP BY 姓名 

SQL SERVER 2005 静态SQL

  
  
  
  
  1. SELECT *   
  2. FROM (SELECT * FROM tb) a PIVOT (MAX(分数) FOR 课程 IN (语文,数学,物理)) b 

 

 

 

 

 

 

你可能感兴趣的:(普通行列转换)