行转列/列转行

行转列:

select t.*, t.rowid from TEST1 t
 
ID  C1    C2   C3
1  小红  数学  10  
2  小红  语文  20  
3  小栏  数学  15  
4 小栏 语文 25
 
--test1
oracle :  SELECT C1,to_char(WM_CONCAT(C2)) c2 FROM TEST1 group by c1
mysql:    SELECT C1,GROUP_CONCAT(C2) c2 FROM TEST1 group by c1
--结果:
 C1      C2
小红 数学,语文
小栏 数学,语文
 
 
--test2
select c1, max(math) as math, max(yuwen) as yuwen
  from (SELECT c1,
               case
                 when c2 = '数学' then
                  c3
               end as math,
               case
                 when c2 = '语文' then
                  c3
               end as yuwen
          from test1)
 group by c1
--结果: 
 C1  数学 语文
小红 10 20
小栏 15 25
 
--test3
select *
  from (select c2, c3 from test1) pivot(sum(c3) for c2 in('数学', '语文'))
--结果:
数学  语文
 25    45
 
--test4
select *
  from (select c1, c2,c3 from test1) pivot(max(c3) for c2 in('数学', '语文'))
--结果:
 C1  数学 语文
小红 10 20
小栏 15 25
posted @ 2019-04-28 17:55  第二人生Bonnie  阅读(199)  评论(0编辑  收藏  举报