Oracle如何取出某一列的所有不重复值作为单独一列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle如何取出某一列的所有不重复值作为单独一列相关的知识,希望对你有一定的参考价值。

字段1 字段2
a 1
a 1
a 2
b 1
b 2
b 3
效果
a 1,2
b 1,2,3
类似纵表变横表,求高手指导,想了很久没想出来

这个是oracle的行变列转换 可以使用一个函数 sys_connect_by_path(column,<分隔符>)


SELECT c.gysid, listagg(c.wzlbid,\',\') within GROUP (ORDER BY c.wzlbid) FROM wzgl_gys_zrwmfw c GROUP BY gysid
这几个方法都可以实现行转列,达到想要的效果。
但当数据量比较大时却报ORA-01489:字符串连接的结果过长。
此时个人的解决办法,只能转到程序代码中去处理。
希望,以此为鉴!
参考技术A 用wmsys.wm_concat这个函数,如果你的库中没有这个函数,参照一个这个网站自己创建一下
http://bbs.csdn.net/topics/360036492?page=1
参考技术B select a, wmsys.wm_concat(b) from atest t group by a

结果:

 a   1,2,1

 b   1,3,2


 

select a, wmsys.wm_concat(b)
  from (select distinct a, b from atest) t
 group by a

结果:

a   2,1

b   3,2,1

本回答被提问者和网友采纳
参考技术C Select distinct column_name from table_name

oracle 表列值唯一 怎么实现

你这个情况,
可以采用
序列号
+
触发器
的方式来处理。
SQL>
CREATE
SEQUENCE
test_sequence2
2
increment
by
1
--
每次递增1
3
start
with
1
--
从1开始
4
nomaxvalue
--
没有最大值
5
minvalue
1
--
最小值=1
6
NOCYCLE;
--
不循环
Sequence
created.
SQL>
CREATE
TABLE
test_create_tab2
(
2
id
INT,
3
val
VARCHAR(10),
4
PRIMARY
KEY
(id)
5
);
Table
created.
SQL>
CREATE
OR
REPLACE
TRIGGER
BeforeTestCreate2Insert
2
BEFORE
INSERT
ON
test_create_tab2
3
FOR
EACH
ROW
4
BEGIN
5
SELECT
test_sequence2.nextval
INTO
:new.id
FROM
dual;
6
END;
7
/
Trigger
created.
SQL>
INSERT
INTO
test_create_tab2(val)
VALUES
('NO
id');
1
row
created.
SQL>
INSERT
INTO
test_create_tab2(id,
val)
VALUES
(1,
'id
no
use');
1
row
created.
SQL>
SELECT
*
FROM
test_create_tab2;
ID
VAL
----------
--------------------
1
NO
id
2
id
no
use
参考技术A select
count(1)
from
xxx
where
yyy
is
null;
首先
yyyy
是nullable这样做才有意义,
如果是nullable
那么最快的是
建一个索引
create
index
ind1
on
xxx(yyy,1);
如下面的例子:
sql>
set
timing
on;
sql>
sql>
select
count(1)
from
tvol
where
owner
is
null;
count(1)
----------
0
elapsed:
00:00:02.89
sql>
sql>
create
index
ind1
on
tvol(owner,1);
index
created.
elapsed:
00:00:20.73
sql>
select
count(1)
from
tvol
where
owner
is
null;
count(1)
----------
0
elapsed:
00:00:00.00

以上是关于Oracle如何取出某一列的所有不重复值作为单独一列的主要内容,如果未能解决你的问题,请参考以下文章

oracle 表列值唯一 怎么实现

SQL如何查询出某一列中不同值出现的次数?

SQL中如何统计查询结果中某一列重复值的个数?

sQL 数据库如何获取一列的非重复值

SQLSERVER去除某一列的重复值并显示所有数据DISTINCT去重ISNULL()求SUM()NOT EXISTS的使用

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