sql語句中的 行轉列 查詢

2021-08-21 13:09:52 字數 1129 閱讀 5844

有時候多行資料需要一行顯示,  這就需要行轉列的sql啦.   

首先  ,要知道 行轉列當然是要以某個字段進行分組的,然後再根據表中  乙個欄位的值做轉列後的欄位名,  這個值所對應的另乙個字段作為  值   

示例:表名: xx班

班級

學生身高一班甲

161一班

乙162一班丙

163一班

丁164一班戊

165

假如:要將上表進行轉列 轉換結果如下表:

班級甲乙

丙丁戊一班

161162

163164

165

以班級進行分組,   以學生 作為欄位名,以身高為每個學生欄位的額值.

select  班級

sum(case when 學生 = 甲  tnen 身高  else  0  end) 甲,

sum(case when 學生 = 乙  tnen 身高  else  0  end)乙 ,

sum(case when 學生 = 丙  tnen 身高  else  0  end)丙 ,

sum(case when 學生 = 丁  tnen 身高  else  0  end)丁 ,

sum(case when 學生 = 戊 tnen 身高  else  0  end) 戊 

from xx班   group by 班級

第二種sql語句, 感覺更好一點  ,

select

*from

(select 班級,學生,身高 from  xx班 )

pivot (

sum (身高) for 學生 in (

'甲'甲,

'乙'乙,

'丙'丙))

括號中的sql 是查詢出 分組字段,   按照 班級分組, 學生和公升高是需要行轉列的

pivot後面的內容中  ,  身高 字段 將作為行轉列後的值,   學生字段,將作為行轉列後的欄位名,

'甲'甲    單引號中 甲 是為了獲取對應行的值 ,  後面的甲 是該值的欄位名 

mysql 查詢行轉列 SQL語句實現行轉列查詢

表sales 查詢結果如下 1 建表 create table dbo sales id int identity 1,1 not null,year int null,jidu int null,jine int null,primary key clustered id asc with pad...

sql查詢行轉列

昨天下午碰到乙個需求,乙個大約30萬行的表,其中有很多重複行,在這些行中某些字段值是不重複的。比如有id,name,contract id,sales,product等,除了product欄位,其餘欄位均是一樣的,需要去重並合併product欄位。下午頭腦發昏,直接寫了個o nm 的vba 從16 ...

MySQL行轉列sql語句

create table test tb grade id int 10 notnull auto increment user name varchar 20 default null course varchar 20 default null score float default 0 pri...