行列轉換
在使用者製作資料包表時,經常會使用到表資料的行列轉換操作!
這裡我們建立兩個表,插入資料,用於實現下面的行列轉換操作。
表也建好了,資料也插入完成了,接下來就可以進行行列轉換操作啦!!!
行轉列方法一:使用case when實現
select方法二:使用decode實現t.y,
max(case
when t.q =
1then
t.amt
else
0end
) q1,
max(case
when t.q =
2then
t.amt
else
0end
) q2,
max(case
when t.q =
3then
t.amt
else
0end
) q3,
max(case
when t.q =
4then
t.amt
else
0end
) q4
from
t_row t
group
by t.y
select方法三:使用位移函式的上移函式(lead函式)實現t.y,
sum(decode(t.q, 1, t.amt, 0
)) q1,
sum(decode(t.q, 2, t.amt, 0
)) q2,
sum(decode(t.q, 3, t.amt, 0
)) q3,
sum(decode(t.q, 4, t.amt, 0
)) q4
from
t_row t
group
by t.y;
with tmp_row as方法四:使用位移函式的下移函式(lag函式)實現(select
t.y,
t.q,
t.amt,
lead(t.amt,
1) over(partition by t.y order
byt.q) lead1,
lead(t.amt,
2) over(partition by t.y order
byt.q) lead2,
lead(t.amt,
3) over(partition by t.y order
byt.q) lead3
from
t_row t)
select
y, amt q1,
lead1 q2,
lead2 q3,
lead3 q4
from
tmp_row
where q =
1;
with tmp_row as方法五:使用oracle獨有的函式pivot實現(select
t.y,
t.q,
t.amt,
lag(t.amt,
1) over(partition by t.y order
by t.q desc
) lag1,
lag(t.amt,
2) over(partition by t.y order
by t.q desc
) lag2,
lag(t.amt,
3) over(partition by t.y order
by t.q desc
) lag3
from
t_row t)
select
y, amt q1,
lag1 q2,
lag2 q3,
lag3 q4
from
tmp_row
where q =
1;
select列轉行方法一:使用oracle獨有的函式unpivot實現*from
t_row
pivot(
sum(amt) for q in (1 q1,2 q2,3 q3,4 q4));
select方法二:使用union all實現y,q,amt
from (select y,q1,q2,q3,q4 from
t_column)
unpivot(amt
for q in (q1 as
1,q2 as
2,q3 as
3,q4 as
4));
with tmp_column as(select t.y, 1
q, t.q1 amt
from
t_column t
union
allselect t.y, 2
q, t.q2 amt
from
t_column t
union
allselect t.y, 3
q, t.q3 amt
from
t_column t
union
allselect t.y, 4
q, t.q4 amt
from
t_column t)
select
y, q,
amt
from
tmp_column
order
by y, q;
Oracle行列轉換
1.列轉行 create table t col row id int,c1 varchar2 10 c2 varchar2 10 c3 varchar2 10 insert into t col row values 1,v11 v21 v31 insert into t col row valu...
Oracle行列轉換
行轉列 select count over cnt,rn,str from select rownum rn,substr a.str,instr a.str,1,a.n 1,instr a.str,1,a.n 1 instr a.str,1,a.n 1 str from select a,b,c,...
oracle 行列轉換
q 如何實現行列轉換 a 1 固定列數的行列轉換 如student subject grade student1 語文 80 student1 數學 70 student1 英語 60 student2 語文 90 student2 數學 80 student2 英語 100 轉換為 語文 數學 英...