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

2021-10-18 10:20:36 字數 1794 閱讀 3651

表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_index = off, statistics_norecompute = off, ignore_dup_key = off, allow_row_locks = on, allow_page_locks = on) on [primary]

) on [primary]

2、插入資料

insert into sales(year, jidu, jine) values(1991,1,11)

insert into sales(year, jidu, jine) values(1991,2,22)

insert into sales(year, jidu, jine) values(1991,3,33)

insert into sales(year, jidu, jine) values(1991,4,44)

insert into sales(year, jidu, jine) values(1992,1,55)

insert into sales(year, jidu, jine) values(1992,2,66)

insert into sales(year, jidu, jine) values(1992,3,77)

insert into sales(year, jidu, jine) values(1992,4,88)

有兩種解決方法:

一、使用case when 實現:

select

year as '年份',

max(case jidu when 1 then jine end) as '第一季度',

max(case jidu when 2 then jine end) as '第二季度',

max(case jidu when 3 then jine end) as '第三季度',

max(case jidu when 4 then jine end) as '第四季度'

from sales group by year

二、使用pivot函式:

使用pivot函式時須注意對公升級到 sql server 2005 或更高版本的資料庫使用 pivot 和 unpivot 時,必須將資料庫的相容級別設定為 90 或更高。

sql語句如下:

select year as 年份,[1] as 第一季度,[2] as 第二季度,[3] as 第三季度,[4] as 第四季度

from (select year,jidu,jine from sales) as t1 pivot (sum(jine) for jidu in ([1],[2],[3],[4])) as a --'t1'和'a'這兩個別名必須得有要不會報錯。

執行結果如下:

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...

sql語句中的 行轉列 查詢

有時候多行資料需要一行顯示,這就需要行轉列的sql啦.首先 要知道 行轉列當然是要以某個字段進行分組的,然後再根據表中 乙個欄位的值做轉列後的欄位名,這個值所對應的另乙個字段作為 值 示例 表名 xx班 班級 學生身高一班甲 161一班 乙162一班丙 163一班 丁164一班戊 165假如 要將上...

sql查詢行轉列

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