目錄
(1)行轉列
(2)列轉行
有如圖所示的表,現在希望查詢的結果將行轉成列
create table `test_tb_grade` (
`id` int(10) not null auto_increment,
`user_name` varchar(20) default null,
`course` varchar(20) default null,
`score` float default '0',
primary key (`id`)
) engine=innodb auto_increment=1 default charset=utf8;
insert into test_tb_grade(user_name, course, score) values
("張三", "數學", 34),
("張三", "語文", 58),
("張三", "英語", 58),
("李四", "數學", 45),
("李四", "語文", 87),
("李四", "英語", 45),
("王五", "數學", 76),
("王五", "語文", 34),
("王五", "英語", 89);
查詢語句:
此處用之所以用max是為了將無資料的點設為0,防止出現null
select user_name ,
max(case course when '數學' then score else 0 end ) 數學,
max(case course when '語文' then score else 0 end ) 語文,
max(case course when '英語' then score else 0 end ) 英語
from test_tb_grade
group by user_name;
有如圖所示的表,現在希望查詢的結果將列成行
建表語句如下:
create table `test_tb_grade2` (
`id` int(10) not null auto_increment,
`user_name` varchar(20) default null,
`cn_score` float default null,
`math_score` float default null,
`en_score` float default '0',
primary key (`id`)
) engine=innodb auto_increment=1 default charset=utf8;
插入資料
insert into test_tb_grade2(user_name, cn_score, math_score, en_score) values
("張三", 34, 58, 58),
("李四", 45, 87, 45),
("王五", 76, 34, 89);
查詢資料
select user_name, '語文' course , cn_score as score from test_tb_grade2
union select user_name, '數學' course, math_score as score from test_tb_grade2
union select user_name, '英語' course, en_score as score from test_tb_grade2
order by user_name,course;
Sql presto語法) 實現行轉列和列轉行
這裡的行列轉換都是在presto語法下可編譯實現 hive sql會有一些差別 sql語句 資料行轉列 表a to 表b 和列轉行 表b to 表a 1.行轉列 sql語句 select country,sum case when cnt cut 0,20 then cnt else 0 end a...
SQL實現行轉列
需求 用sql實現行轉列。如下圖所示 行顯示的資料轉換成列顯示 實現行轉列的sql指令碼如下 select date format last day date format now y m d y m d as 業務日期,max case index code when ind20101001 th...
Mysql實現行轉列
create table loc loc varchar 50 xiaoqu varchar 50 addr varchar 50 company varchar 50 插入資料 區域 小區名稱 房屋位址 中介公司寶山 慶安三村 綏化路52弄a寶山 月浦十村 月浦十村67號b寶山 盛橋三村 盛橋三村...