Portal | Manuals | References | Downloads | Info | Programs | JCLs | Master the Mainframes
IBM Mainframe Computers Forums Index
 
Register
 
IBM Mainframe Computers Forums Index Mainframe: Search IBM Mainframe Forum: FAQ Memberlist Usergroups Profile Log in to check your private messages Log in
 

 

how to delete duplicate rows in the table??

 
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> DB2
View previous topic :: :: View next topic  
Author Message
bhoompallipraveen

New User


Joined: 07 Dec 2005
Posts: 6

PostPosted: Fri Dec 30, 2005 11:38 am    Post subject:
Reply with quote

Hi,

Can anyone tell me how to delete duplicate rows in the table??
My requirement is I have a table with no primary key . I want to eliminate duplicate rows based on some criteria.

Could you help me out.

Thanks in Advance
Praveen
Back to top
View user's profile Send private message

DavidatK

Active Member


Joined: 22 Nov 2005
Posts: 700
Location: Troy, Michigan USA

PostPosted: Sat Dec 31, 2005 2:30 am    Post subject: Re: how to delete duplicate rows in the table??
Reply with quote

bhoompallipraveen,

This is one way if eliminating dups from a table, while maintaining one row only using SQL. It is so much easier to use cursors in COBOL to perform this function.

The base table was created

Code:

CREATE TABLE XXXXX.EMPLOYEE               
            (LAST_NAME         CHAR(20),   
             FIRST_NAME        CHAR(20),   
             MI                CHAR(1),   
             DEPT_NBR          DEC(4)     
             )                             
        IN DATABASE XXXXX;                 


The following, though not a single SQL, will eliminate the duplicate rows. And, if you must do it in SQL only, and without anything that can make the duplicate rows unique, this does work, though not pretty.


Code:


PAGE    1                                         
***INPUT STATEMENT:                               
   SELECT *                                       
     FROM EMPLOYEE                               
   ;                                             
      +-------------------------------------------------------------+
      |      LAST_NAME       |      FIRST_NAME      | MI | DEPT_NBR |
      +-------------------------------------------------------------+
    1_| Smith                | John                 | T  |  1000    |
    2_| Jones                | John                 | L  |  1200    |
    3_| Smith                | John                 | T  |  1000    |
    4_| Jones                | David                | S  |  1000    |
    5_| Smith                | John                 | T  |  1210    |
    6_| Johnson              | Roy                  | S  |  2000    |
    7_| Johnson              | Roy                  | S  |  2000    |
    8_| Johnson              | Roy                  | S  |  2000    |
      +-------------------------------------------------------------+
SUCCESSFUL RETRIEVAL OF        8 ROW(S)     

    DECLARE GLOBAL TEMPORARY TABLE EMPLOYEE               
      (                                                   
           LAST_NAME                 CHAR(20),             
           FIRST_NAME                CHAR(20),             
           MI                        CHAR(1),             
           DEPT_NBR                  DEC(4)               
       )                                                   
    ;                                                     
  RESULT OF SQL STATEMENT:                                 
  DSNT400I SQLCODE = 000,  SUCCESSFUL EXECUTION           
 DECLARE   SUCCESSFUL
                                     
PAGE    1                                                             
***INPUT STATEMENT:                                                   
   INSERT INTO SESSION.EMPLOYEE                                       
   SELECT DISTINCT *                                                   
     FROM EMPLOYEE              A                                     
    WHERE EXISTS                                                       
          (SELECT COUNT(*)                                             
             FROM EMPLOYEE             B                               
            WHERE B.LAST_NAME = A.LAST_NAME                           
              AND B.FIRST_NAME = A.FIRST_NAME                         
              AND B.MI = A.MI                                         
              AND B.DEPT_NBR = A.DEPT_NBR                             
           HAVING COUNT(*) > 1)                                       
   ;                                                                   
 RESULT OF SQL STATEMENT:                                             
 DSNT400I SQLCODE = 000,  SUCCESSFUL EXECUTION                         
 DSNT416I SQLERRD    = 0  0  2  -1  0  0 SQL DIAGNOSTIC INFORMATION   
 DSNT416I SQLERRD    = X'00000000'  X'00000000'  X'00000002'  X'FFFFFFF
          INFORMATION                                                 
SUCCESSFUL INSERT    OF        2 ROW(S)           
PAGE    1                                   
***INPUT STATEMENT:                         
   SELECT *                                 
     FROM SESSION.EMPLOYEE                 
   ;                                       
     +-------------------------------------------------------------+
     |      LAST_NAME       |      FIRST_NAME      | MI | DEPT_NBR |
     +-------------------------------------------------------------+
   1_| Johnson              | Roy                  | S  |  2000    |
   2_| Smith                | John                 | T  |  1000    |
     +-------------------------------------------------------------+
SUCCESSFUL RETRIEVAL OF        2 ROW(S)                       
PAGE    1                                                     
***INPUT STATEMENT:                                           
   DELETE FROM EMPLOYEE   E                                   
    WHERE EXISTS                                             
          (SELECT *                                           
             FROM SESSION.EMPLOYEE   SE                       
            WHERE SE.LAST_NAME    = E.LAST_NAME               
              AND SE.FIRST_NAME   = E.FIRST_NAME             
              AND SE.MI           = E.MI                     
              AND SE.DEPT_NBR     = E.DEPT_NBR               
           )                                                 
   ;                                                         
RESULT OF SQL STATEMENT:                                             
 DSNT400I SQLCODE = 000,  SUCCESSFUL EXECUTION                       
 DSNT416I SQLERRD    = 0  0  5  -1  0  0 SQL DIAGNOSTIC INFORMATION   
 DSNT416I SQLERRD    = X'00000000'  X'00000000'  X'00000005'  X'FFFFFF
          INFORMATION                                                 
SUCCESSFUL DELETE    OF        5 ROW(S)                               
PAGE    1                                                             
***INPUT STATEMENT:                                                   
   SELECT *                                                           
     FROM EMPLOYEE                                                   
   ;                                                                 
     +-------------------------------------------------------------+
     |      LAST_NAME       |      FIRST_NAME      | MI | DEPT_NBR |
     +-------------------------------------------------------------+
   1_| Jones                | John                 | L  |  1200    |
   2_| Jones                | David                | S  |  1000    |
   3_| Smith                | John                 | T  |  1210    |
     +-------------------------------------------------------------+
SUCCESSFUL RETRIEVAL OF        3 ROW(S)           
PAGE    1                                         
***INPUT STATEMENT:                               
   SELECT *                                       
     FROM SESSION.EMPLOYEE                       
   ;                                             
     +-------------------------------------------------------------+
     |      LAST_NAME       |      FIRST_NAME      | MI | DEPT_NBR |
     +-------------------------------------------------------------+
   1_| Johnson              | Roy                  | S  |  2000    |
   2_| Smith                | John                 | T  |  1000    |
     +-------------------------------------------------------------+                                                             
SUCCESSFUL RETRIEVAL OF        2 ROW(S)                               
PAGE    1                                                             
***INPUT STATEMENT:                                                   
   INSERT INTO EMPLOYEE                                               
   SELECT DISTINCT *                                                   
     FROM SESSION.EMPLOYEE                                             
   ;                                                                   
 RESULT OF SQL STATEMENT:                                             
 DSNT400I SQLCODE = 000,  SUCCESSFUL EXECUTION                         
 DSNT416I SQLERRD    = 0  0  2  -1  0  0 SQL DIAGNOSTIC INFORMATION   
 DSNT416I SQLERRD    = X'00000000'  X'00000000'  X'00000002'  X'FFFFFFF
          INFORMATION                                                 
SUCCESSFUL INSERT    OF        2 ROW(S)                               
PAGE    1                                                             
***INPUT STATEMENT:                                                   
   SELECT *                                                           
     FROM EMPLOYEE                                                     
   ;                                                                   
     +-------------------------------------------------------------+
     |      LAST_NAME       |      FIRST_NAME      | MI | DEPT_NBR |
     +-------------------------------------------------------------+
   1_| Jones                | John                 | L  |  1200    |
   2_| Jones                | David                | S  |  1000    |
   3_| Smith                | John                 | T  |  1210    |
   4_| Smith                | John                 | T  |  1000    |
   5_| Johnson              | Roy                  | S  |  2000    |
     +-------------------------------------------------------------+
 

 
Back to top
View user's profile Send private message
sarojini

New User


Joined: 08 Dec 2005
Posts: 10
Location: India

PostPosted: Sat Dec 31, 2005 9:49 am    Post subject:
Reply with quote

hi friend i have one answer it is omited the null vales.
select cout(distinct(column-name)) from table name.
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> DB2 All times are GMT + 6 Hours
Page 1 of 1

 

Search our Forum:

Similar Topics
Topic Author Forum Replies Posted
No new posts DB2 query Using Recursion, Converting... smilewithashu2 DB2 1 Tue Jan 03, 2017 12:50 pm
No new posts SQL query to run through list of valu... Ni3-db2 DB2 14 Wed Dec 14, 2016 9:52 am
No new posts JCL to delete component in a package sundaram.naveen Compuware & Other Tools 14 Tue Nov 29, 2016 6:21 pm
No new posts Limit duplicate records in the SORT pshongal SYNCSORT 6 Mon Nov 21, 2016 12:54 pm
This topic is locked: you cannot edit posts or make replies. Db2 SQL query to convert rows into co... subratarec DB2 5 Thu Nov 17, 2016 4:51 pm


Facebook
Back to Top
 
Mainframe Wiki | Forum Rules | Bookmarks | Subscriptions | FAQ | Tutorials | Contact Us