Oracle SQL實現行轉列的用法

2021-10-23 17:13:47 字數 2853 閱讀 1067

oracle 將行轉成列的實現

create table tmp(rq varchar2(10),shengfu varchar2(5));

insert into tmp values('2005-05-09','勝');

insert into tmp values('2005-05-09','勝');

insert into tmp values('2005-05-09','負');

insert into tmp values('2005-05-09','負');

insert into tmp values('2005-05-10','勝');

insert into tmp values('2005-05-10','負');

insert into tmp values('2005-05-10','負');

select rq,decode(shengfu,'勝',1) 勝,decode(shengfu ,'負',2)負 from tmp;

select rq, count(decode(shengfu,'勝',1))勝,count(decode(shengfu ,'負',2)) 負 from tmp group by rq;

create table student_score

( name varchar2(20),

subject varchar2(20),

score number(4,1)

);insert into student_score (name, subject, score) values ('張三', '語文', 78.0);

insert into student_score (name, subject, score) values ('張三', '數學', 88.0);

insert into student_score (name, subject, score) values ('張三', '英語', 98.0);

insert into student_score (name, subject, score) values ('李四', '語文', 89.0);

insert into student_score (name, subject, score) values ('李四', '數學', 76.0);

insert into student_score (name, subject, score) values ('李四', '英語', 90.0);

insert into student_score (name, subject, score) values ('王五', '語文', 99.0);

insert into student_score (name, subject, score) values ('王五', '數學', 66.0);

insert into student_score (name, subject, score) values ('王五', '英語', 91.0);

/*姓名 語文 數學 英語

王五 89 56 89

*/--方式一:decode()函式

select max(decode(ss.subject,'語文',ss.score)) 語文,max(decode(ss.subject,'數學',ss.score)) 數學,max(decode(ss.subject,'英語',ss.score)) 英語 from student_score ss group by ss.name;

--方式二: case when then

select max(case ss.subject when '語文' then ss.score end) 語文,max(case ss.subject when '數學' then ss.score end) 數學, max(case ss.subject when '英語' then ss.score end) 英語 from student_score ss group by ss."name";

--方式三:join表連線

select ss01.score 語文,ss02.score 數學,ss03.score 英語 from(select ss."name",ss.score from student_score ss where ss.subject='語文') ss01

join (select ss."name",ss.score from student_score ss where ss.subject='數學') ss02 on ss01.name =ss02.name

join (select ss."name",ss.score from student_score ss where ss.subject='英語') ss03 on ss01.name=ss03.name

--方式四:union all 值得注意的是 各個科目的填充位置不可以改變,不然統計不對

select tt.name 姓名,max(tt.語文) 語文, max(tt.數學) 數學, max(tt.英語) 英語 from

(select ss01."name",ss01.score 語文,0 數學, 0 英語 from student_score ss01 where ss01.subject='語文' union all

select ss02."name",0 語文 ,ss02.score 數學 , 0 英語 from student_score ss02 where ss02.subject='數學' union all

select ss03."name", 0 語文 , 0 數學,ss03.score 英語 from student_score ss03 where ss03.subject='英語') tt group by tt.name

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寶山 盛橋三村 盛橋三村...

pandas實現行轉列

hive進行大資料分析資料經常用到行轉列,pandas也可以的。不解釋直接上 coding utf 8 import pandas as pd c df pd.dataframe c print df df left df key df values 0 df values str.split ex...