sql 將行顯示為列

2021-06-17 19:27:21 字數 1963 閱讀 6057

比如說,有乙個表

create table  tbcoursegrade

( student varchar(10) ,

course varchar(10) ,

grade int

)

然後有一些記錄:

insert into  tbcoursegrade (student ,  course  ,  grade )

values ('小明' , '高數' , 98 ),

('小明' , '英語' , 56 ) ,

('小明' , '語文' , 77 ) ,

('小紅' , '高數' , 89 ),

('小紅' , '英語' , 88 ) ,

('小明' , '語文' , 67 )

insert into tbcoursegrade(student , course , grade )

values ('小公尺' , '高數' ,55)

那麼顯示出來應該是:

student   course   grade

小明         高數        98

小明        英語         56

小紅      高數           89

小公尺      高數           55

那怎麼才能顯示為

名字      高數     英語    語文

小明      98        56      77

小紅  ******

小公尺     55       null      null

這是乙個很經常遇到的問題:將行顯示為列  !!!

下面提供兩種方法:

1,自己連線自己四次

select  yuan.student as 姓名 ,

gaoshu.grade as 高數 ,

yingyu.grade as 英語 ,

yuwen.grade as 語文

from tbcoursegrade as yuan

left join tbcoursegrade as gaoshu

on (yuan.student = gaoshu.student and gaoshu.course='高數')

left join tbcoursegrade as yingyu

on (yuan.student = yingyu.student and yingyu.course='英語' )

left join tbcoursegrade as yuwen

on (yuan.student = yuwen.student and yuwen.course='語文')

2,用case語句

select yuan.student as 姓名 , 

max (case when hou.course='高數'

then hou.grade

else null

end ) as 高數成績 ,

max (case when hou.course='英語'

then hou.grade

else null

end ) as 英語成績 ,

max (case when hou.course='語文'

then hou.grade

else null

end) as 語文成績

from tbcoursegrade as yuan

join tbcoursegrade as hou on yuan.student= hou.student

group by yuan.student

Sql 怎樣將某個列轉為行,實

如下圖,的任務就是將圖一轉為圖二 此功能在pb中的交叉報表也可實現 編寫此段 是因為今天遇到客戶有這個需求,自己覺得可以挑戰一下,就嘗試做下來了 如下 create table patient result temp patient code nvarchar 100 date test datet...

sql server 一列顯示為一行

select id,msg stuff select 存號為 convert varchar,s id,10 from t input where id a.id and value 1000000 for xml path 1,1,from input as a wherevalue 100000...

DataTable將行轉成列

以前一直覺得泛型比較好用,一直沒使用datatable,最近發現泛型也不是萬能的,比如將行轉成列。雖然這種在前台js轉比較方便,但可能也需要這樣的介面,提供別人呼叫,還是記錄一下。將行轉成列 datatable dtresult utility.convertdatatabletovertical ...