189 8069 5689

oracle如何转列 oracle怎么将列转行

oracle如何实现行转列

用union all

创新互联公司专注于贺兰网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供贺兰营销型网站建设,贺兰网站制作、贺兰网页设计、贺兰网站官网定制、小程序开发服务,打造贺兰网络公司原创品牌,更为您提供贺兰网站排名全网营销落地服务。

假设列名分别为 col1 cola colb...

select col1,cola

from tabname

where ...

union all

select col1,colb

from tabname

where ...

union all

select col1,colc

from tabname

where ...

union all

select col1,cold

from tabname

where ...

union all

select col1,cole

from tabname

where ...

union all

select col1,colf

from tabname

where ...

oracle 根据某一行的值转化成列?

楼主这种 典型的行列转换问题。

Oracle 一般就通过 DECODE 或者 CASE WHEN 来处理。

SQL CREATE TABLE TEST_YLX (

2 name VARCHAR2(2),

3 zfname VARCHAR2(6),

4 tdate DATE

5 );

Table created.

SQL

SQL INSERT INTO TEST_YLX VALUES ('A', 'size1', TO_DATE('2010-02-01', 'YYYY-MM-D

D') );

1 row created.

SQL INSERT INTO TEST_YLX VALUES ('A', 'size2', TO_DATE('2010-02-01', 'YYYY-MM-D

D') );

1 row created.

SQL INSERT INTO TEST_YLX VALUES ('B', 'size1', TO_DATE('2010-02-01', 'YYYY-MM-D

D') );

1 row created.

SQL INSERT INTO TEST_YLX VALUES ('C', 'size3', TO_DATE('2010-02-01', 'YYYY-MM-D

D') );

1 row created.

SQL

SQL SELECT

2 name,

3 SUM ( DECODE(zfname, 'size1', 1, 0) ) AS size1,

4 SUM ( DECODE(zfname, 'size2', 1, 0) ) AS size2,

5 SUM ( CASE WHEN(zfname = 'size3') THEN 1

6 ELSE 0

7 END

8 ) AS size3

9 FROM

10 test_ylx

11 GROUP BY

12 name;

NAME SIZE1 SIZE2 SIZE3

---- ---------- ---------- ----------

A 1 1 0

B 1 0 0

C 0 0 1

SQL

上面的例子中, size1 和 size2 是用 DECODE

size3 用 CASE WHEN

看具体情况需要,而使用。

========================================

唯一麻烦的是

这个SQL, 需要预先知道, size1 size2 size3 这些信息

如果表中新增加了 size4 , 需要修改 SQL 语句。

Oracle列转行,行转列

oracle下可以用函数decode处理:

select 产品名称,

sum(decode(季度,'第一季度',销售额,0)) 第一季度销售额,

sum(decode(季度,'第二季度',销售额,0)) 第二季度销售额,

sum(decode(季度,'第三季度',销售额,0)) 第三季度销售额,

sum(decode(季度,'第四季度',销售额,0)) 第四季度销售额,

from 表名

group by 产品名称;

oracle 行转列 ,这个要怎么转

with  t(cate_displayname,info_waritername,count) as (

select '2014年','lizifeng',1 from dual 

union all

select '历史沿革','wenqingwen',20 from dual 

union all

select '领导讲话','lizifeng',3 from dual 

)

SELECT cate_displayname,

nvl(lizifeng,0) as lizifeng,

nvl(wenqingwen,0) as wenqingwen

FROM   t

PIVOT (

sum(count)        ---- pivot_clause

FOR info_waritername          ---- pivot_for_clause

IN  ('lizifeng' as lizifeng,'wenqingwen' as wenqingwen)   ---- pivot_in_clause

);

输出:

CATE_DISPLAYNAME           LIZIFENG WENQINGWEN

------------------------ ---------- ----------

2014年                            1          0

历史沿革                          0         20

领导讲话                          3          0


分享标题:oracle如何转列 oracle怎么将列转行
分享URL:http://jkwzsj.com/article/hjeosd.html

其他资讯