纵表与横表互转的SQL

来源:互联网 发布:算法的配套网站 编辑:程序博客网 时间:2024/03/28 17:21

学习了一下纵表与横表互转的SQL,但是感觉效率比较低,不知道有没有更好的转换方法。

 

现把转换方法列举如下:

 

1、纵表转横表:

    纵表结构 TableA 

Name

Course

Grade

张三

语文

75

张三

数学

80

张三

英语

90

李四

语文

95

李四

数学

55

 横表结构 TableB

Name

语文

数学

英语

张三

75

80

90

李四

95

55

0

 

 

方法一:

select Name,

sum(case Course when ‘语文‘ then Grade else 0 end) as 语文,

sum(case Course when ‘数学‘ then Grade else 0 end) as 数学,

sum(case Course when ‘英语‘ then Grade else 0 end) as 英语

from TableA

group by Name

 

 

2、横表转纵表的"SQL"示例
横表结构: TEST_H2Z
      ID      姓名    语文        数学       英语      
      1       张三     80         90         70            
      2       李四     90         85         95          
      3       王五     88         75         90          
 
转换后的表结构:  
      ID     姓名     科目     成绩  
      1       张三     语文     80  
      2       张三     数学     90  
      3       张三     英语     70  
      4       李四     语文     90  
      5       李四     数学     80    
      6       李四     英语     99  
      7       王五     语文     85  
      8       王五     数学     96  
      9       王五     英语     88  
横表转纵表SQL示例:
SELECT   姓名,'语文'   AS     科目,语文   AS   成绩   FROM   TEST_H2Z   UNION   ALL 
SELECT   姓名,'数学'   AS     科目,数学   AS   成绩   FROM   TEST_H2Z   UNION   ALL 
SELECT   姓名,'英语'   AS     科目,英语   AS   成绩   FROM   TEST_H2Z
ORDER BY 姓名,科目 DESC;