网站建设资讯

NEWS

网站建设资讯

oracle怎么转成列 oracle字符串转列

oracle 行转列 ,这个要怎么转

with  t(cate_displayname,info_waritername,count) as (

创新互联公司从2013年开始,先为东营区等服务建站,东营区等地企业,进行企业商务咨询服务。为东营区企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

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

一般就通过

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

7

END

8

)

AS

size3

9

FROM

10

test_ylx

11

GROUP

BY

12

name;

NAME

SIZE1

SIZE2

SIZE3

----

----------

----------

----------

A

1

1

B

1

C

1

SQL

上面的例子中,

size1

size2

是用

DECODE

size3

CASE

WHEN

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

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

唯一麻烦的是

这个SQL,

需要预先知道,

size1

size2

size3

这些信息

如果表中新增加了

size4

需要修改

SQL

语句。

oracle数据库里面如何把一行数据转化为列显示

可用union all来实现。

如test表中数据如下:

现要将id为3的一条按列显示,可用如下语句:

select to_char(id) str from test where id=3

union all

select name from test where id=3;

查询结果:

oracle 如何将 行转换为列 (具体如下,求sql)

WITH A AS(SELECT ID_F,LINE_F,STAGE_F,UNITSTAGE_F,CAST(CHILDSTAGE_F AS VARCHAR(100)) AS CHILDSTAGE_F,PARENTID_F FROM 表名 WHERE PARENTID_F IS NULL

UNION ALL

SELECT 表名.ID_F,表名.LINE_F,表名.STAGE_F,表名.UNITSTAGE_F,CAST(A.CHILDSTAGE_F+表名.CHILDSTAGE_F AS VARCHAR(100)) AS CHILDSTAGE_F,表名.PARENTID_F

FROM 表名 JOIN A ON 表名.PARENTID_F=A.ID_F)

SELECT LINE_F,STAGE_F,UNITSTAGE_F,CHILDSTAGE_F

FROM A

WHERE PARENTID_F IS NOT NULL

oracle 行和列转换

如果你要做转换查询,真心劝你不要这么干,我的写法很麻烦,一张表不停的查询,逻辑读肯定搞得要死。

如果是往下面这张表灌数,那么可以写循环,慢慢来一行对应一列,可以根据表的列和数据的对应关系往里面灌,这个相对简单些。

我的写法大概是子查询+union all 上面为a表

那么就写为select ‘第一季度' 销售额,(select 第一季度销售额 from a where 产品名称='奶酪')奶酪,(select 第一季度销售额 from a where 产品名称='啤酒') from dual

union all

还像上面那么写,写第二季度

union all

第三季度

union all

第四季度

一张表重读查询8次,如果表很大,我估计机器会宕掉的。

因为单独从一列来看也可以理解为列转行,所以用case when写也可以,这么写似乎读取的次数会少些,不过要用到group by分组,天知道二者最后谁的消耗大。不过如果表很大的话,还是那句话,建议新建表然后灌数,这么直接查,真的会死掉的。

以上为个人建议,如果找到什么好写法,也可以研究下。


当前标题:oracle怎么转成列 oracle字符串转列
文章来源:http://njwzjz.com/article/hpoeco.html