Remove Duplicates From Comma Separated String

Hi,
I have one Column which contains duplicates values with comma separated.
Customer ID
5,5,5,5,6,6,5,5,5,6,7,4,1,2,1,4,7,2
I wrote this:
select REGEXP_REPLACE('5,5,5,5,6,6,5,5,5,6,7,4,1,2,1,4,7,2', '(^|,)([^,]*)(,\2)+','\1\2') from dual;
5,6,5,6,7,4,1,2,1,4,7,2
But it eliminates only continuous elements.
I want out put like:
5,6,7,4,1,2
Please help.
Thanks.
Amit
Edited by: 987565 on Feb 12, 2013 4:02 AM

Thanks Purvesh,
While testing with real data, it is ignoring some values. I didn't understand why it happening.
with data as
select '5714,5714,5714,5714,5714,5714,5714,5714,5714,5714,5714,5714,5668,5716,5714,5714,5714,5714,5714,5714,5714,5714,5714,5714,5714,5714,5668,5716' col from dual
select ltrim(max(sys_connect_by_path(col, ',')) keep (dense_rank last order by rn - 1), ',') col
from (
select col, row_number() over (order by 1) rn
from (
select distinct regexp_substr(col, '[^,]+', 1, level) col
from data
connect by level <= length(col) - length(replace(col, ','))
start with rn = 1
connect by prior rn = rn - 1;
Result I got is:
5714,5714,5716
My Real Query is like that:
declare
cursor c1 is
select o.id id
from order o;
v_char varchar2(200) := '';
begin
for a1 in c1 loop
with data as
select o.cust_id as col into v_char
from order o
where o.id = a1.id
select ltrim(max(sys_connect_by_path(col, ',')) keep (dense_rank last order by rn - 1), ',') col
from (
select col, row_number() over (order by 1) rn
from (
select distinct regexp_substr(col, '[^,]+', 1, level) col
from data
connect by level <= length(col) - length(replace(col, ','))
start with rn = 1
connect by prior rn = rn - 1;
SYS.dbms_output.put_line(v_char);
end loop;
end;
Later, i will update same cust_id with v_char.

Similar Messages

  • Read/Insert values from comma separated string

    I need Stored procedure to insert values in table using comma separated values from string based on algorithm as below.
    There are two table Mtable(Parent table), Ctable(Child table).
    Value passed from String can be like_
    1,A001,R1,C1,R2,C2,R3,C3
    2,A002,X1,Y1,X2,Y2
    3,A003,A1,B1,A2,B2,A3,B3
    1)For line1 I need to insert in Mtable values(1,A001)
    And in ctable I need to insert 3 rows with values
         ROW1     (1,R1,C1)
         ROW2     (1,R2,C2)
         ROW3     (1,R3,C3)
    2)For line2 I need to insert in Mtable values(2,A002)
    And in ctable I need to insert 2 rows with values
         ROW1     (2,X1,Y1)
         ROW2     (2,X2,Y2)
    Please help me to overcome this.
    Thanks

    create table t as
    select '1,A001,R1,C1,R2,C2,R3,C3' s from dual union
    select '2,A002,X1,Y1,X2,Y2' from dual union
    select '3,A003,A1,B1,A2,B2,A3,B3' from dual
    Table created
    select substr(s,1,instr(s,',')-1),
    substr(s,instr(s,',',1,2*i)+1,instr(s||',',',',1,2*i+1)-instr(s,',',1,2*i)-1),
    substr(s,instr(s,',',1,2*i+1)+1,instr(s||',',',',1,2*i+2)-instr(s,',',1,2*i+1)-1
    from t, (select 1 i from dual union select 2 from dual union select 3 from dual)
    where instr(s,',',1,2*i+1)>0
    order by 1,i
    SUBSTR(S,1,INSTR(S,',')-1) SUBSTR(S,INSTR(S,',',1,2*I)+1, SUBSTR(S,INSTR(S,',',1
    1                          R1                             C1                   
    1                          R2                             C2                   
    1                          R3                             C3                   
    2                          X1                             Y1                   
    2                          X2                             Y2                   
    3                          A1                             B1                   
    3                          A2                             B2                   
    3                          A3                             B3                   
    8 rows selected

  • MODEL clause to process a comma separated string

    Hi,
    I'm trying to parse a comma separated string using SQL so that it will return the parsed values as rows;
    eg. 'ABC,DEF GHI,JKL' would return 3 rows;
    'ABC'
    'DEF GHI'
    'JKL'
    I'm thinking that I could possibily use the MODEL clause combined with REGULAR expressions to solve this as I've already got a bit of SQL which does the opposite ie. turning the rows into 1 comma separated string;
    select id, substr( concat_string, 2 ) as string
    from (select 1 id, 'ABC' string from dual union all select 1, 'DEF GHI' from dual union all select 1, 'JKL' from dual)
    model
    return updated rows
    partition by ( id )
    dimension by ( row_number() over (partition by id order by string) as position )
    measures ( cast(string as varchar2(4000) ) as concat_string )
    rules
    upsert
    iterate( 1000 )
    until ( presentv(concat_string[iteration_number+2],1,0) = 0 )
    ( concat_string[0] = concat_string[0] || ',' || concat_string[iteration_number+1] )
    order by id;
    Can anyone give me some pointers how to parse the comma separated string using regexp and create as many rows as needed using the MODEL clause?

    Yes, you could do it without using ITERATE, but FOR ... INCREMENT is pretty much same loop. Couple of improvements:
    a) there is no need for CHAINE measure
    b) there is no need for CASE in RULES clause
    c) NVL can be applies on measures level
    with t as (select 1 id, 'ABC,DEF GHI,JKL,DEF GHI,JKL,DEF GHI,JKL,DEF,GHI,JKL' string from dual
       union all
        select 2,'MNO' string from dual
        union all
       select 3,null string from dual
    SELECT  id,
             string
      FROM   T
       MODEL
        RETURN UPDATED ROWS
        partition by (id)
        DIMENSION BY (0 POSITION)
        MEASURES(
                 string,
                 NVL(LENGTH(REGEXP_REPLACE(string,'[^,]+','')),0)+1 NB_MOT
        RULES
         string[FOR POSITION FROM  1 TO NB_MOT[0] INCREMENT 1] = REGEXP_SUBSTR(string[0],'[^,]+',1,CV(POSITION))
    SQL> with t as (select 1 id, 'ABC,DEF GHI,JKL,DEF GHI,JKL,DEF GHI,JKL,DEF,GHI,JKL' string from dual
      2     union all
      3      select 2,'MNO' string from dual
      4      union all
      5     select 3,null string from dual
      6      )
      7   SELECT  id,
      8           string
      9    FROM   T
    10     MODEL
    11      RETURN UPDATED ROWS
    12      partition by (id)
    13      DIMENSION BY (0 POSITION)
    14      MEASURES(
    15               string,
    16               NVL(LENGTH(REGEXP_REPLACE(string,'[^,]+','')),0)+1 NB_MOT
    17              )
    18      RULES
    19      (
    20       string[FOR POSITION FROM  1 TO NB_MOT[0] INCREMENT 1] = REGEXP_SUBSTR(string[0],'[^,]+',1,CV(POSITION))
    21      )
    22  /
            ID STRING
             1 ABC
             1 DEF GHI
             1 JKL
             1 DEF GHI
             1 JKL
             1 DEF GHI
             1 JKL
             1 DEF
             1 GHI
             1 JKL
             2 MNO
            ID STRING
             3
    12 rows selected.
    SQL> SY.

  • Look Up For Comma Separated Strings

    Hi,
    How to look up for comma separated string from livecycle forms manager ??
    Plz gimme an idea on this.
    Raghava Kumar V.S.S.

    Hi
    My point is that the more detailed you ask your question, the more likely you are to get an answer.
    Those of us who monitor these newsgroups also appreciate you doing as much of your own research as possible, before asking us for help - we're more likely to spend our own (personal and valuable) time helping you, if we know that you've spent your own time doing research, and you've still not been able to solve the problem.
    I look forward to your next question :-)
    Howard

  • Passing comma separated string to stored procedure

    Hi,
    There is thread with same query I created earlier and that was answered. That solution worked if I pass comma separated string containing IDs. But due to changes in the logic, I have to pass usernames instead of userIDs. I tried to modify the solution provided to use with this.
    Following the link to previous post :
    Re: Passing comma separated string to stored procedure
    ------Package-------
    TYPE refcurQID IS REF CURSOR;
    TYPE refcurPubs IS REF CURSOR;
    procedure GetAllPersonalQueue (p_user_name in nvarchar2, TestQID OUT Test.refcurQID
    , TestPubs OUT Test.refcurPubs);
    ------Package-------
    ------Package Body-------
    PROCEDURE GetAllPersonalQueue (p_user_name in nvarchar2, TestQID OUT Test.refcurQID, TestPubs OUT Test.refcurPubs) as
    BEGIN
    Open TestQID for
    select id from cfq where name in (p_user_name);
    Open TestPubs for
    SELECT qid FROM queues WHERE qid in(
    select id from cfq where name in (p_user_name));
    END GetAllPersonalQueue;
    ------Package Body-------
    Thanks in advance
    Aditya

    Hi,
    I modified the query as per the solution provided by isotope, after which the logic changed and I am passing username instead of userID in comma separated string.
    Following is the changes SP, which does not throw any error, but no data is returned.
    PROCEDURE GetAllPersonalQueue (p_user_name in nvarchar2, TestQID OUT Test.refcurQID, TestPubs OUT Test.refcurPubs
    ) is
    --local variable
    strFilter varchar2(100);
    BEGIN
    Open TestQID for
    select id, name from cfq where name in
    select regexp_substr(p_user_name||',','[a-z]+[0-9]+',1,level)
    from dual
    connect by level <= (select max(length(p_user_name)-length(replace(p_user_name,',')))+1
    from dual)
    Open TestPubs for
    SELECT qid FROM queues WHERE qid in(
    select id from cfq where name in
    select regexp_substr(p_user_name||',','[a-z]+[0-9]+',1,level)
    from dual
    connect by level <= (select max(length(p_user_name)-length(replace(p_user_name,',')))+1
    from dual)
    END GetAllPersonalQueue;
    Edited by: adityapawar on Feb 27, 2009 8:38 AM

  • Convert comma separated string in rows

    Dear Gurus,
    I want to convert comma separated string in rows so as to insert in collection.
    e.g. string 1234,2323,23232,2343,34234
    Above string should be converted in rows so as to insert in table or collection
    Thanks in advance
    Sanjeev

    Or slight variation...
    SQL> ed
    Wrote file afiedt.buf
      1  with t as (select '1234,2323,23232,2343,34234' as txt from dual)
      2  --
      3  select REGEXP_SUBSTR (txt, '[^,]+', 1, level)
      4  from t
      5* connect by REGEXP_SUBSTR (txt, '[^,]+', 1, level) is not null
      6  /
    REGEXP_SUBSTR(TXT,'[^,]+',
    1234
    2323
    23232
    2343
    34234... so it doesn't have to work out how many levels it needs to do, it just keeps going until it get's a no-value (of course that assumes that there is always a value between each comma)

  • Removing Duplicate Characters in a String without using a Hashset

    I was wondering if anyone knew a way of removing duplicate characters in a string without using a Hashset.
    I want to go from
    helloworld -> helowrd

    okay, here it is
    1) use a loop, look through each character in the original string
    2) look at the new string, if this character exist, don't add it, otherwise add it.
    check out methods in java.lang.String

  • Best app to remove duplicates from iTunes 2014

    Hi All,
    I've been trying to research the best application to sort and remove duplicates from my iTunes library. I have over 7000 songs and iTunes built in duplicate finder doesn't look at the track fingerprint, which is useful for those songs which are labelled "Track_1" etc.
    Has anyone reviewed any recent products? I was looking at TuneUp, but after reading so many negative comments, I've decided not to go down that path. I would prefer a program that did most of the work for me, due to the amount of songs. Happy to pay for a good product...
    I do have MusicBrainz Picard, which has done a great job of tagging, but don't remove duplicates.
    Thanks in advance :-)

    Tune up is a great app.  When they moved from version 2 to version 3 is when it went to crap and all heck broke loose.  They shut their doors  but they have since re opened and went back to developing  version 2.  I use that version and I am pretty happy with it as being an overall cleanup utility.  I also use Musicbrainz and a couple of other utilities but in the end if you have an enormous library 20k plus then you are going to have a few slip through.  I would probably go with Tuneup if I were you and a thorough third party duplicate finder.  Dupe Guru's music edition seems to do a pretty good job.

  • HT2905 i have just followed all the insrtuctions in support to remove duplicates from my library but now most of my musicis gone except for my recent purchases. How come and how do i fix it?

    i have just followed all the instructions in support to remove duplicates from my library but now most of my music is gone except for my recent purchases. How come and how do i fix it?

    Final Cut is a separate, higher end video editor.  The pro version of iMovie.
    Give iPhoto a look at for creating the slideshow.  It's easy to assemble the photos in an album in iPhoto, put them in the order you want and then make a slideshow of them.  You can select from various themes and transitions between slides and add music from your iTunes library.
    When you have the slidshow as you want use the Export button at the bottom of the iPhoto window and export with Size = Medium or Large.
    Save the resulting Quicktime movie file in your Movies folder.
    Next, open iDVD, choose your theme and drag the QT movie file into the menu window being careful to avoid any drop zones.
    Then follow this workflow to help assure the best qualty video DVD:
    Once you have the project as you want it save it as a disk image via the File ➙ Save as Disk Image  menu option. This will separate the encoding process from the burn process. 
    To check the encoding mount the disk image, launch DVD Player and play it.  If it plays OK with DVD Player the encoding is good.
    Then burn to disk with Disk Utility or Toast at the slowest speed available (2x-4x) to assure the best burn quality.  Always use top quality media:  Verbatim, Maxell or Taiyo Yuden DVD-R are the most recommended in these forums.
    The reason I suggest iPhoto is that I find it much easier to use than iMovie (except for the older iMovie 6 HD version).  Personal preferences showing here.

  • Union all-distinct and remove duplicates from nested table?

    Hi all,
    I need a select that will bulk collect some data in my nested table.
    I have two tables from which I need to select all the accounts only once.(remove duplicates).
    Tried to search on the forum...but no luck.
    I have a table with one column:
    create table a1(account_no number);
    and a second table with 3 columns.
    create table a2 (account_no number, name number, desc varchar2 (100));
    I have a nested table like:
    table of a2%rowtype;
    Can I select from this two table in one select and put in my nested table just one row per account?
    if a I have in a 2a row like :
    1 'test' 'test2'
    2 aaaa aa
    and in a1 a row like:
    1
    I want to put in my nested table just (1, null,null and 2,aaaa, aa)) or (1,test,test2 and 2,aaaa, aa). it does no matter what row from those two I insert.
    Second question:
    If I use:
    BANNER
    Oracle9i Release 9.2.0.5.0 - Production
    PL/SQL Release 9.2.0.5.0 - Production
    CORE     9.2.0.6.0     Production
    TNS for 32-bit Windows: Version 9.2.0.5.0 - Production
    NLSRTL Version 9.2.0.5.0 - Production
    SQL>
    what is the best solution to remove duplicates from a neste table like mine?
    I thought that I can build another nested table and loop in my first nt and for each row I check in there was the same account in previous lines.
    it will be like:
    for i in 1....nt_first.count loop
    for j in 1..i loop
        --check if my line was in previous lines. if it was...do not move it in my second collection
    end loop;it is this best option in oracle 9i?

    I have a table with one column:
    create table a1(account_no number);
    and a second table with 3 columns.
    create table a2 (account_no number, name number, desc varchar2 (100));
    all I need are the accounts. the rest ar extra data
    that I can ignore in this step. But if it is
    available, it is ok to use it.
    using one select in this case is is much better that
    trying to remove duplicates parsing some nested table
    with FOR many times?
    Thankshi,
    try to use union. Union automatically removes duplicates between two or more tables.
    with t1 AS
           (select '3300000' account_no FROM DUAL UNION
            select '6500000' account_no FROM DUAL union
            select '6500000' account_no FROM DUAL union
            select '6500000' account_no FROM DUAL union
            select '6500000' account_no FROM DUAL
           select * from t1ACCOUNT_NO
    3300000
    6500000

  • Removes duplicates from a sorted array without having to create a new array

    Funcation removes duplicates from a sorted array without having to create a new array

    Funcation removes duplicates from a sorted array
    without having to create a new arrayIs a 'funcation' like a vacation but more fun or
    something?LMFAO. You just jumped with both feet on one of my biggest peeves. I've been outed!
    Actual words/phrases I've seen used which I hate with every fiber of my being:
    "Mrs. Freshly's"
    "McFlurry"
    "Freshissimo"
    "Spee-dee"
    "Moons Over My Hammy"
    One of my favorite SNL skits had Will Ferrell leading a panel of movie reviewers (they're the worst for this kind of junk). Each one had some cheesy pun to describe their respective movie. Ferrell topped the show off with his endorsement of "Fantasia 2000 is Fantasgreat!"
    LOL.
    "Come to Slippy Village - it's a FUNCATION!"
    &#167; (runs off, laughing maniacally, head explodes)

  • [svn:osmf:] 15983: Updating VideoQoSPluginMetadataSynthesizer to create comma separated string values for all of the available keys .

    Revision: 15983
    Revision: 15983
    Author:   [email protected]
    Date:     2010-05-10 04:47:46 -0700 (Mon, 10 May 2010)
    Log Message:
    Updating VideoQoSPluginMetadataSynthesizer to create comma separated string values for all of the available keys.
    Modified Paths:
        osmf/trunk/apps/samples/plugins/VideoQoSPlugin/src/org/osmf/qos/VideoQoSPluginMetadataSyn thesizer.as

    Rob:
    "but the sad thing is, that managers will most likely respond with a "This used to be fast in MSSQL, but now it isn't any more in Oracle. Oracle is so slow ...""
    On the bright side, it sounds like most of the database calls are implemented as stored procedures, so there is an opportunity to do it right (in Oracle terms) in the stored procedures.
    I did a similar conversion a while back, converting bad SQLServer procedures to good Oracle procedures. Everyone said "Oracle is much faster that SQLServer"
    John

  • What is the best app for identifying and removing duplicates from iPhoto Libraries/Pictures?

    I have five iPhoto Libraries (original, default merged, etc.)  I've tried using iPhoto Library Manager, but I seem to be digging a deeper hole.  Also, question about the 15,000 faces:  Are these taking up space on my hard drive?  I gather I cannot easily remove them from libraries.  Taking photos at concerts, sporting events, etc. just creates more faces in iPhoto;  frankly, I could do without ANY FACE DETECTION!

    These applications will identify and help remove duplicate photos from an iPhoto Library:
    iPhoto Library Manager - $29.95
    Duplicate Annihilator - $7.95 - only app able to detect duplicate thumbnail files or faces files when an iPhoto 8 or earlier library has been imported into another.
    PhotoSweeper - $9.95 - This app can search by comparing the image's bitmaps or histograms thus finding duplicates with different file names and dates.
    DeCloner - $19.95 - can find duplicates in iPhoto Libraries or in folders on the HD.
    DupliFinder - $7 - shows which events the photos are in.
    iPhoto AppleScript to Remove Duplicates - Free
    PhotoDedupo - $4.99 (App Store) -  this app has a "similar" search feature which is like PhotoSweeper's bitmap comparison.  It found all duplicates
    Duplicate Cleaner for iPhoto - free - was able to recognize the duplicated HDR and normal files from an iPhone shooting in HDR
    Some users have reported that PhotoSweeper did the best in finding all of the dups in their library: iphoto has duplicated many photos, how...: Apple Support Communities.
    If you have an iPhone and have it set to keep the normal photo when shooting HDR photos the two image files that are created will be duplicates in a manner of speaking (same image) but there are only twp apps that detected the iPhone HDR and normal photos as being duplicates:  PhotoSweeper and Duplicate Cleaner for iPhoto.  None of the other apps detected those two files as being duplicates as they look for file name as well as other attributes and the two files from the iPhone have different file names.
    iPLM, however, is the best all around iPhoto utility as it can do so much more than just find duplicates.  IMO it's a must have tool if using iPhoto.

  • Insert data from table1 with PK to remove duplicates from table2 without PK

    There will probably be a simple solution to my issue although it is currently evading me. I have a table that contains 14 million rows. There are many duplicates within this table that I need to remove. I was hoping an old trick I used in MS Access would
    help, this solution was to create an identical table and add a PK on the filed I wanted to remove the duplicates from. Then just copy+paste append from one table to the other and Access would just drop the rows that were duplicated. Very simple yet worked
    quickly and effectively. Is there a quick way to do this in MS SQL as everything i've tried so far has failed. Any help would be greatly appreciated.
    Ian

    try below
    create table source_table (
    column1 int,
    column2 varchar(32)
    create table destination_table
    column1 int primary key,
    column2 varchar(32)
    insert into source_table (column1, column2) values (1, 'VAL2');
    insert into source_table (column1, column2) values (2, 'VAL3');
    insert into source_table (column1, column2) values (3, 'VAL4');
    insert into source_table (column1, column2) values (4, 'VAL5');
    insert into source_table (column1, column2) values (4, 'VAL5');
    insert into source_table (column1, column2) values (4, 'VAL5');
    GO
    -- simple method
    WITH CTE AS
    select
    ROW_NUMBER() OVER (partition by column1 ORDER BY column2) rno, column1, column2
    from source_table )
    insert into destination_table(column1, column2)
    select column1, column2 from CTE where rno =1
    -- inserting in while loop little chunks(500000), you can reduce if you want
    Declare @startid int =0, @totalrecords int = 14000000, @count int = 500000
    while(@startid <= @totalrecords)
    begin
    WITH CTE AS
    select
    ROW_NUMBER() OVER (partition by column1 ORDER BY column2) rno, column1, column2
    from source_table where column1 between @startid and @startid+@count)
    insert into destination_table(column1, column2)
    select column1, column2 from CTE where rno =1
    Print convert(varchar , @startid+@count)+ ' processed' -- indication while running
    set @startid = @startid+@count
    end
    Thanks
    Saravana Kumar C

  • Converting comma separated string into rows

    for my procedure  varchar2 is i/p paramter. i will get this i/p from java. this string value is like  'VTP,VR','VM'.
    i want to split taht string into rows  ie o/p will be
    VTR
    VR
    VM.
    how to do this.

    Hi,
    As always, the solution depends on your data, your requirements, and you Oracle version.
    Here's one way:
    -- Simulating Java input with a bind variable:
    VARIABLE  str VARCHAR2 (100)
    EXEC     :str := 'VTP,VR,VM';
    SELECT  LEVEL  AS n
    ,       REGEXP_SUBSTR ( :str
                          , '[^,]+'
                          , 1
                          , LEVEL
                          ) AS str_part
    FROM     dual
    CONNECT BY LEVEL <= 1 + REGEXP_COUNT (:str, ',')
    I'm just guessing that your original string doesn't include single-quotes after VR or before VM.  If it does, you can use TRIM to remove them from the string passed back by REGEXP_SUBSTR.

Maybe you are looking for

  • Proforma Invoice for Free of Charge Delivery

    I want to know how to create a pro forma invoice for a free of charge delivery. Currently the item category is KLN and it says that the item category is not relevant for billing.   Thanks in advance Dinesh

  • Reg: Top_Of_List Events in ALV GRID Display

    Hi , How can i use the the the Top_of_list Event Alv grid Disply. I have passed Events table with event name and form name to GRID FM it_events. Form details:- T_LISTHEADER header deatils table with data. .  FORM TOP_OF_LIST. CALL FUNCTION 'REUSE_ALV

  • ExecuteQuery in jsp page.

    Hello, i have a problem with executingQuery from Mysql server into a jsp page. what happens exactly is that only one row of the query is executed . there must be something missing that prevents displaying the whole query. anybody to suuggest a soluti

  • Query based LOV in an updateable report

    Hi, I have an updateable report which has a select box where the user can select "Item" I have another select box in the same report that needs to "update" its values according to the selected item. Is this possible? My first thought was to let the s

  • Database Refresh with (data + metadata including views, functions etc)

    PROBLEM: I want to refresh data + metadata (tables, views, function, procedures, packages, triggers, package body etc) from one database to another database. Now if objects already exists in the TARGET database, then we have option as TABLE_EXISTS_AC