行转列.列转行 oracle

列转行

Create   table   test   (name   char(10),km   char(10),cj   int)   
    
  insert   test   values('张三','语文',80)   
  insert   test   values('张三','数学',86)   
  insert   test   values('张三','英语',75)   
  insert   test   values('李四','语文',78)   
  insert   test   values('李四','数学',85)   
  insert   test   values('李四','英语',78)   
    
   select   name,   
  sum(decode(km,'语文',CJ,0))   语文   ,   
  sum(decode(km,'数学',cj,0))   数学,   
  sum(decode(km,'英语',cj,0))   英语   
  from   test1   
  group   by   name
    
  姓名       语文       数学       英语   
  张三       80           86           75   
  李四       78           85           78   

再转列

select 姓名, decode(rn, 1, 语文, 2, 数学, 3,英语)
    from test1   , (select level rn from dual connect by 1=1 and level <=3)

你可能感兴趣的:(oracle,table,insert)