熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

關於oracle的查詢結果的行列互換

2013-11-13 16:15:20  來源: Oracle 

  /*

  在實際使用sql工作中總會碰到將某一列的值放到標題中顯示就是總說的行列轉換或者互換

  比如有如下數據:

  ID NAME       KECHENG              CHENGJI

  

    a          語文                

    a          數學                

    b          語文                

    b          數學                

    c          語文                

    c          數學                

  那末我要求顯示的結果是:

  NAME       YUWEN                  SHUXUE

  

  a                              

  也就是說把課程這一列放到行上顯示把成績按照課程分配到相對應的行

  我只介紹中簡單易用的方法使用游標或者建立臨時表的方法就不介紹了效率很慢不易理解

  首先建立表:

  */

  create table fzq

  (

  id varchar()

  name varchar()

  kecheng varchar()

  chengji varchar()

  );

  插入數據:

  insert into fzq values (a語文);

  insert into fzq values(ashuxue);

  insert into fzq values (byuwen);

  insert into fzq values (bshuxu);

  insert into fzq values (cyuwen);

  insert into fzq values (cshuxu);

  /*首先使用union如果課程這列有多個值那麼腳本的代碼就很長了*/

  select namesum(yuwen) yuwensum(shuxue) shuxue from

  (

  select namechengji yuwen shuxue from fzq

  where kecheng=yuwen union

  select name yuwenchengji  shuxue

  from fzq

  where kecheng=shuxue

  ) aaa

  group BY name;

  /*執行結果:

  NAME       YUWEN                  SHUXUE

  

  a                              

  b                              

  c                              

  */

  /*

  其次是用case這種方法代碼比較短適合列值很多的情況

  */

  select name sum(case kecheng when yuwen then chengji end) yuwen

  sum(case kecheng  when shuxue then chengji  end) shuxue

  from fzq

  group by name;

  /*執行結果:

  NAME       YUWEN                  SHUXUE

  

  a                              

  b                              

  c                              

  所有例子在oracle中測試sql server沒有測試請根據實際情況修改

  */

  select namesum(decode(kecheng 語文 chengji null)) 語文

  sum(decode(kecheng 數學 chengji null)) 數學

  sum(decode(kecheng 英語 chengji null)) 英語

  from fzq

  group by name


From:http://tw.wingwit.com/Article/program/Oracle/201311/18036.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.