Oracle筆記 之 行列互換

2021-10-14 13:04:35 字數 3175 閱讀 9246

pivot函式:行轉列函式

格式pivot(任一聚合函式 for 需專列的值所在列名 in (需轉為列名的值))

pivot函式位於from集合後

示例示例1:

select *

from emp

pivot(

sum(nvl(sal,0)

)for deptno in(10

as accounting,

20as research,

30as sales));

# 結果

17654 martin salesman 7698

1981-09

-281400.00

1250

27698 blake manager 7839

1981-05

-012850

37934 miller clerk 7782

1982-01

-231300

47521 ward salesman 7698

1981-02

-22500.00

1250

57566 jones manager 7839

1981-04

-022975

67844 turner salesman 7698

1981-09

-080.00

1500

77900 james clerk 7698

1981-12

-039508

7839 king president 1981-11

-175000

97876 adams clerk 7788

1987-05

-231100

107902 ford analyst 7566

1981-12

-033000

117788 scott analyst 7566

1987-04

-193000

127782 clark manager 7839

1981-06

-092450

137369 smith clerk 7902

1980-12

-1780014

7499 allen salesman 7698

1981-02

-20300.00

1600

示例2:

select *

from

(select deptno,

sum(nvl(sal,0)

) sal from emp group by deptno)

pivot(

sum(nvl(sal,0)

)for deptno in(10

as accounting,

20as research,

30as sales));

# 結果

18750

10875

9400

注意:這裡select子句後面都使用 『 * 』而不是指定顯示列來顯示。

unpivot函式:列轉行函式

格式語法:unpivot(新增行的數值列名 for 新增行的屬性列名 in (需轉為行的列名))。

unpivot函式位於from集合後。

示例

select empno, ename, job, mgr, hiredate, deptno,

type

, value

from emp unpivot(value for

type

in(sal, comm));

# 結果

17369 smith clerk 7902

1980-12

-1720 sal 800.00

27499 allen salesman 7698

1981-02

-2030 sal 1600.00

37499 allen salesman 7698

1981-02

-2030 comm 300.00

47521 ward salesman 7698

1981-02

-2230 sal 1250.00

57521 ward salesman 7698

1981-02

-2230 comm 500.00

67566 jones manager 7839

1981-04

-0220 sal 2975.00

77654 martin salesman 7698

1981-09

-2830 sal 1250.00

87654 martin salesman 7698

1981-09

-2830 comm 1400.00

97698 blake manager 7839

1981-05

-0130 sal 2850.00

107782 clark manager 7839

1981-06

-0910 sal 2450.00

117788 scott analyst 7566

1987-04

-1920 sal 3000.00

127839 king president 1981-11

-1710 sal 5000.00

137844 turner salesman 7698

1981-09

-0830 sal 1500.00

147844 turner salesman 7698

1981-09

-0830 comm 0.00

157876 adams clerk 7788

1987-05

-2320 sal 1100.00

167900 james clerk 7698

1981-12

-0330 sal 950.00

177902 ford analyst 7566

1981-12

-0320 sal 3000.00

187934 miller clerk 7782

1982-01

-2310 sal 1300.00

oracle之行列互轉

建立臨時表 temp with tempas select 湖北省 nation,武漢市 city,first rank from dual union allselect 湖北省 nation,宜昌市 city,second rank from dual union allselect 湖北省 n...

Oracle行列互換總結

oracle行列互換總結 1.多行換成一行 col1 col2 col1 col2 a 1 a 2 轉換後 a 1,2,3 a 3 a.sys connect by path 函式 select name,ltrim max sys connect by path userid,userid fro...

oracle 常用寫法 行列互換

oracle 11g 行列互換 pivot 和 unpivot 說明 在oracle 11g中,oracle 又增加了2個查詢 pivot 行轉列 和unpivot 列轉行 參考 google 一下,網上有一篇比較詳細的文件 pivot 列轉行 測試資料 id,型別名稱,銷售數量 案例 根據水果的型...