我返回的值为255个逗号分隔值.是否有一种简单的方法可以将这些分成不包含255个子列的列?
ROW | VAL
-----------
1 | 1.25, 3.87, 2, ...
2 | 5, 4, 3.3, ....
Run Code Online (Sandbox Code Playgroud)
至
ROW | VAL | VAL | VAL ...
---------------------
1 |1.25 |3.87 | 2 ...
2 | 5 | 4 | 3.3 ...
Run Code Online (Sandbox Code Playgroud) 我有一个oracle 11g数据库,在Windows Server 2008上运行:
Oracle Database 11g企业版11.1.0.6.0版 - 生产
我有两个表和三个视图:
CREATE TABLE UTILS.SEG_ROLES
(
APLICACION VARCHAR2(12 BYTE),
ROL VARCHAR2(12 BYTE),
USUARIOS VARCHAR2(255 BYTE)
)
SET DEFINE OFF;
Insert into SEG_ROLES (APLICACION, ROL, USUARIOS) Values ('MULTIPLAN', 'ADMIN', 'ADMIN');
Insert into SEG_ROLES (APLICACION, ROL, USUARIOS) Values ('MULTIPLAN', 'CAR01', 'PATY ');
Insert into SEG_ROLES (APLICACION, ROL, USUARIOS) Values ('MULTIPLAN', 'CAR02', 'FABIOLA, ERIKA');
Insert into SEG_ROLES (APLICACION, ROL, USUARIOS) Values ('MULTIPLAN', 'CON01', 'LUCY, PATY');
Insert into SEG_ROLES (APLICACION, ROL, USUARIOS) Values ('MULTIPLAN', 'CON02', 'VALERIA'); …Run Code Online (Sandbox Code Playgroud) 我有oracle拆分查询的问题.
在使用oracle查询中的connect by和regular expression将逗号分隔数据拆分为多行时,我获得了更多的重复行.例如,实际上我的表有150行,在那两行中有逗号分隔的字符串,所以整体上我只得到155行,但我得到2000行.如果我使用distinct其工作正常但我不想在查询结果中重复行.
我尝试了以下查询,但它在查询结果中生成重复的行:
WITH CTE AS (SELECT 'a,b,c,d,e' temp,1 slno FROM DUAL
UNION
SELECT 'f,g',2 from dual
UNION
SELECT 'h',3 FROM DUAL)
SELECT TRIM(REGEXP_SUBSTR( TEMP, '[^,]+', 1, LEVEL)) ,SLNO FROM CTE
CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(temp, '[^,]+')) + 1
Run Code Online (Sandbox Code Playgroud)
编辑
上面的select查询只能拆分单个逗号分隔的字符串,但是,当在具有多行的表上执行时,它会生成重复的行.如何限制重复的行?
我的桌子有三列.其中一列[ Col3]具有多个值.所以,当我在桌面上做一个select命令时:
Select col1, col2, col3 from MyTable
Run Code Online (Sandbox Code Playgroud)
它给了我以下结果:
Col1 Col2 Col3
------------------------------
Row 1 430 A319 N1160 N1336
Row 2 abc efg G3489 M5678 N5643
Run Code Online (Sandbox Code Playgroud)
如果有任何方法可以获得输出:
Col1 Col2 Col3
------------------------------
Row 1 430 A319 N1160
Row 2 430 A319 N1336
Row 3 abc efg G3489
Row 4 abc efg M5678
Row 5 abc efg N5643
Run Code Online (Sandbox Code Playgroud)
就像列有多个值一样,然后会显示与列中每个值对应的新行,其他列应包含重复的数据.
我希望我对这个问题很清楚.
我已经进行了广泛的搜索,试图找到一种从给定列表中选择表中不存在的不同值的方法,但似乎没有一种简单的方法可以做到这一点.
我想知道这是否可能以某种方式做,或者是将这些值放入表中并从中选择不同的最简单的解决方案?
这是我要做的事情的要点:
Select distinct column_name from dual
where column_name in ('one','two','two','elephant');