豎表轉橫表

2021-05-08 08:03:28 字數 2251 閱讀 4844

今天遇到乙個要求將豎表轉換成橫表。以前看過豎表轉橫表但沒寫過,現記錄下來以供學習。

任務大體要求如下:

教師號  星期號 是否有課

1    2   有

1    3   有

2    1   有

3    2   有

1    2   有

寫一條sql語句讓你變為這樣的表

教師號 星期一 星期二 星期三

1       2   1 

2   1   

3       1

-------------------------------------------

建表:create table teac_info(

teac_no number,

day_no number,

arrg_mode varchar2(5))

新增資料:

insert into teac_info values(1,2,'有');

insert into teac_info values(1,3,'有');

insert into teac_info values(2,1,'有');

insert into teac_info values(3,2,'有');

insert into teac_info values(1,2,'有');

(1)、oracle 10g,在此平台上用的是oracle的decode函式(在此平台上的語句執行通過):

select teac_no as 教師編號

,sum(decode(day_no,1,1)) as 星期一

,sum(decode(day_no,2,1)) as 星期二

,sum(decode(day_no,3,1)) as 星期三

from teac_info

where arrg_mode ='有'

group by teac_no

輸出如下:

教師編號     星期一     星期二     星期三

---------- ---------- ---------- ----------

1                     2          1

2          1           

3                     1

select teac_no as 教師編號,

sum(case day_no when 1 then 1 end ) 星期一,

sum(case day_no when 2 then 1 end ) 星期二,

sum(case day_no when 3 then 1 end ) 星期三,

from teac_info

where arrg_mode ='有'

group by teac_no

對ms sql平台的這條語句不很熟悉,為了方便對ms sql平台語句的理解,我將原來的語句貼上下來:

(以下資料來自:http://blog.sina.com.cn/s/blog_567a8f380100cr2g.html)

測試資料:

create table test (name char(10),subject char(10),score int)

goinsert test values( '張三 ', '語文 ',80)

insert test values( '張三 ', '數學 ',86)

insert test values( '張三 ', '英語 ',75)

insert test values( '李四 ', '語文 ',78)

insert test values( '李四 ', '數學 ',85)

insert test values( '李四 ', '英語 ',78)

--想變成以下效果

---- 姓名 語文 數學 英語

-- 張三 80 86 75

-- 李四 78 85 78

select name,

sum(case t.subject when '語文' then t.score else 0 end ) 語文,

sum(case t.subject when '數學' then t.score else 0 end ) 數學,

sum(case t.subject when '英語' then t.score else 0 end ) 英語

from test t

group by t.name

SQL豎表轉橫表 橫表轉豎表

豎表轉橫表 豎表結構 name course grade 張三語文 75張三 數學80 張三英語 90李四 語文95 李四數學 55轉換後橫表結構 name 語文數學 英語張三 7580 90李四 9555 0sql語句 1 select name,2sum case course when 語文 ...

oracle SQL豎表轉橫表

oracle sql豎表轉橫表 t t student表查詢記錄如下,要轉成橫表 姓名 課程 成績 1 張飛 語文 80 2 張飛 數學 87 3 關羽 語文 97 4 張飛 英語 68 5 關羽 數學 53 6 劉備 語文 90 方法一 用decode實現,select t.name,sum de...

oracle SQL豎表轉橫表

oracle sql 實現豎表轉橫表 t t student表查詢記錄如下,要轉成橫表 姓名 課程 成績 1 張飛 語文 80 2 張飛 數學 87 3 關羽 語文 97 4 張飛 英語 68 5 關羽 數學 53 6 劉備 語文 90 方法一 用decode實現,select t.name,sum...