行列互轉之case when

2021-08-18 04:52:31 字數 3254 閱讀 4190

--檢視資料結構

select * from emp;

select ename,sal,deptno from emp;

--行轉列,case when和max()函式

select ename,

max(case deptno when 10 then sal end) d10,

max(case deptno when 20 then sal end) d20,

max(case deptno when 30 then sal end) d30 from emp

group by ename;

--行轉列,case when

select ename,

case when deptno=10 then sal end d10,

case when deptno=20 then sal end d20,

case when deptno=30 then sal end d30 from emp;

--行轉列,case when的另一種形式

select ename,

case deptno when 10 then sal end d10,

case deptno when 20 then sal end d20,

case deptno when 30 then sal end d30 from emp;

--列轉行,使用union,union all集合操作。

--為提高效能,建議使用臨時表,少用sql巢狀

select ename,10 deptno,d10 sal from

(select ename,

case deptno when 10 then sal end d10,

case deptno when 20 then sal end d20,

case deptno when 30 then sal end d30 from emp) where d10 is not null

union all

select ename,20 deptno,d20 sal from

(select ename,

case deptno when 10 then sal end d10,

case deptno when 20 then sal end d20,

case deptno when 30 then sal end d30 from emp) where d20 is not null

union all

select ename,30 deptno,d30 sal from

(select ename,

case deptno when 10 then sal end d10,

case deptno when 20 then sal end d20,

case deptno when 30 then sal end d30 from emp) where d30 is not null;

--把資料放入臨時表

create table temp_column as select ename,

case deptno when 10 then sal end d10,

case deptno when 20 then sal end d20,

case deptno when 30 then sal end d30 from emp;

create table temp_line as select * from

(select ename,10 deptno,d10 sal from temp_column where d10 is not null

union all

select ename,20 deptno,d20 sal from temp_column where d20 is not null

union all

select ename,30 deptno,d30 sal from temp_column where d30 is not null);

--drop table temp_column;

--drop talbe temp_line;

--查詢處理後的資料

select * from temp_column;

select * from temp_line;

create table fruit

(imonth varchar2(10),

ename varchar2(10),

sale number);

--drop table fruit;

insert into fruit values('1月','楊梅',11);

insert into fruit values('1月','藍莓',22);

insert into fruit values('1月','櫻桃',33);

insert into fruit values('2月','楊梅',111);

insert into fruit values('2月','藍莓',222);

insert into fruit values('2月','櫻桃',333);

select * from fruit;

select imonth,

case ename when '楊梅' then sale end 楊梅,

case ename when '藍莓' then sale end 藍莓,

case ename when '櫻桃' then sale end 櫻桃 from fruit;

create table temp_friut_column as

select imonth,

max(case ename when '楊梅' then sale end) 楊梅,

max(case ename when '藍莓' then sale end) 藍莓,

max(case ename when '櫻桃' then sale end) 櫻桃 from fruit

group by imonth;

select imonth,'楊梅' ename,楊梅 sale from temp_friut_column

union all

select imonth,'藍莓' ename,藍莓 sale from temp_friut_column

union all

select imonth,'櫻桃' ename,櫻桃 sale from temp_friut_column;

hive行列互轉

先說行轉列是什麼意思啊,假設有這樣的資料,uid表示使用者,time表示時刻,event表示使用者這個時刻在幹什麼,我們儲存到資料庫中就是這樣的 uidtime event a09 01 00睜眼a 09 02 00 找手機a 09 03 00發呆a 09 04 00洗臉a 09 05 00刷牙a ...

sql 行列互轉

1 行轉列 現有資料 期望資料 1.1建表建資料 if object id temp 20170701 u is not null drop table temp 20170701 create table temp 20170701 id int primary key identity 1,1 ...

使用 case when進行行列轉換

固定列數的行列轉換,表結構為 轉換後 要求 建立表,源表,表名 student 只用一句sql 得到轉換結果。解答 方法一 通過生成臨時表的方式操作 select name sum yw as 語文 sum sx as 數學 sum wy as 英語 from select name case su...