關於行轉列sql的實現

2021-08-29 12:16:49 字數 1501 閱讀 6824

最近業務需求經常會遇到行轉列的情況出現。個人也是最近接觸到,總結了兩種常用方法,邏輯也非常好理解。之前在網上也看到了不少其他oracle行轉列的方法,有些是oracle特有的函式,放到其他資料庫未必支援。下來我們看兩個簡單,函式經常會使用到的版本。

1.建立測試表

create table cc  

(student varchar,course varchar2,score int

);

2.插入測試資料

insert into cc   

select '張三',n'語文',78 from dual union all

select '張三',n'數學',87 from dual union all

select '張三',n'英語',82 from dual union all

select '張三',n'物理',90 from dual union all

select '李四',n'語文',65 from dual union all

select '李四',n'數學',77 from dual union all

select '李四',n'英語',65 from dual union all

select '李四',n'物理',85 from dual ;

3.預期實現結果

上圖,abcd分別代表測試資料的各個科目。

4.實現方法一:

select  

student,

max(decode(course, '語文', score)) a,

max(decode(course, '數學', score)) b,

max(decode(course, '英語', score)) c,

max(decode(course, '物理', score)) d,

sum(score) total

from

cc

group by

student

5.實現方法二:

select student,

sum(case course when '語文' then score else 0 end) ,

sum(case course when '數學' then score else 0 end) ,

sum(case course when '英語' then score else 0 end) ,

sum(case course when '物理' then score else 0 end)

from cc

group by student

SQL行轉列的實現

將列值旋轉成列名 即行轉列 是我們在開發中經常會遇到的乙個需要,下面就介紹三種實現思路。假設我有表tb score且表中資料如下圖 行轉列之後的效果如下圖 方式一 使用靜態sql select user name 姓名,sum case course when 語文 then score else ...

sql的行轉列

在弄資料包表的時候,我們常常會用到這個需求。在mysql中行轉列 新建乙個表,學生名字,課程,分數 drop table if exists student create table student username varchar 20 subjects varchar 20 score int ...

SQL 行轉列查詢的簡易實現

開發中難免遇到一些非常靈活的設計,比如對sql的行轉列進行業務資料展現的.最近在做系統設計的時候設計了乙個公共物件的擴充套件表,然後需要實現不同業務物件的組合查詢,因此借鑑了以前經典的學生科目成績行轉列的案例 在此自己做了修正,以供分享.先曬圖說效果 1 表的原始資料 2 轉換後的資料 ok 下面具...