ORACLE 行轉列 的寫法

2021-08-27 00:27:22 字數 1370 閱讀 1381

drop table foo;

/**建立一張演示的表**/

create table foo (

bbbid number(2), --主鍵

depid number(2), --單位編號

aac006 varchar2(1) --性別 1男 2女 0未知

constraint ck_aac006 check (aac006 = '1' or aac006 ='2' or aac006 ='0')

/**插入用於測試的資料**/

insert into foo values(1,1,'1');

insert into foo values(2,1,'0');

insert into foo values(3,1,'2');

insert into foo values(4,1,'2');

insert into foo values(5,2,'1');

insert into foo values(6,2,'0');

insert into foo values(7,2,'2');

insert into foo values(8,2,'2');

insert into foo values(9,3,'2');

insert into foo values(10,3,'2');

insert into foo values(11,3,'2');

目標:對該錶進行行轉列,要得到如下結果集:

depid 男 女 未知

1 1 1 2

2 1 1 2

3 0 0 3

/**原始的資料**/

select * from foo;

/**按照性別碼表取值,將foo.aac006轉化為3列之後的值**/

select depid,

decode(aac006,'0',1,0) "男",

decode(aac006,'1',1,0) "女",

decode(aac006,'2',1,0) "未知"

from foo;

/**在上乙個結果集上進行加工,就得到行轉列的結果!**/

select depid,

sum(decode(aac006,'0',1,0)) "男",

sum(decode(aac006,'1',1,0)) "女",

sum(decode(aac006,'2',1,0)) "未知"

from foo

group by depid;

總結(czw 20120624):

行轉列,其實就是將某乙個字段,按照碼值拆分為若干個字段,最後通過聚集函式得到相應的值。

oracle 行轉列,多行轉列

問題描述 應公司要求,設計功能,乙個id,對應不同的值,展示的時候不同的值拼接展示,如何實現 解決思路 1 拼接字串,想到了 oracle function 這樣肯定能實現,但是比較麻煩 2 oracle 自帶的乙個函式 wm concat 函式 非常給力 上 測試表1 create table c...

oracle行轉列實踐

在oracle 11g中,oracle 增加了2個查詢 pivot 行轉列 和unpivot 列轉行 pivot 聚合函式 for 列名 in 型別 其中 in 中可以指定別名,in中還可以指定子查詢 行轉列 select org id,item,sum value from rhsa gcfx r...

Oracle 行轉列 的例子

乙個同事寫的,那出來和大家分享一下 create table score fname nvarchar2 50 fsubject nvarchar2 50 fresult decimal 18,0 insert into score values 張三 語文 20 insert into score...