Solved

Query to compare the contents of a field using PL/SQL

Posted on 2007-11-19
9
1,538 Views
Last Modified: 2013-12-07
I need to compare the contents of a field to make sure that the fields have the same value.  For example here is the table stucture:

PONUM              ITEMNUM         POLINENUM         CCNUMBER
1234                   3214                       1                    012345678
1234                   4325                       2                    987654321

I need to compare the contents of CCNUMBER to make sure they are the same.  How would I best handle this task using PL/SQL?          
0
Comment
Question by:ewgf2002
  • 4
  • 3
  • 2
9 Comments
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 20312823
>I need to compare the contents of CCNUMBER to make sure they are the same.
can you explain a bit more what you mean with "they need to be the same"?

I guess, for the same PONUM you must have the same CCNumber?
0
 

Author Comment

by:ewgf2002
ID: 20312837
That is correct.
0
 
LVL 142

Expert Comment

by:Guy Hengel [angelIII / a3]
ID: 20312851
what about this code to identify them:
select PONUM  , max(CCNUMBER), min(CCNUMBER)

from yourtable

GROUP BY PONUM

HAVING max(CCNUMBER) <> min(CCNUMBER)

Open in new window

0
 
LVL 73

Expert Comment

by:sdstuber
ID: 20312858
I wouldn't use pl/sql at all.  I'd do it with sql.

SELECT *
  FROM (SELECT ponum, ccnumber, COUNT(DISTINCT ccnumber) OVER(PARTITION BY ponum) cnt
          FROM my_table)
 WHERE cnt > 1
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 73

Expert Comment

by:sdstuber
ID: 20312891
select PONUM  , max(CCNUMBER), min(CCNUMBER)
from yourtable
GROUP BY PONUM
HAVING max(CCNUMBER) <> min(CCNUMBER)

This doesn't work if ccnumber has any nulls in it

0
 

Author Comment

by:ewgf2002
ID: 20312920
What if CCNUMBER does have nulls
0
 
LVL 142

Accepted Solution

by:
Guy Hengel [angelIII / a3] earned 250 total points
ID: 20312975
if there are nulls, you can try this
select PONUM  , max(CCNUMBER), min(CCNUMBER)

from yourtable

GROUP BY PONUM

HAVING max(NVL(CCNUMBER, 'XXXXXXXXXXXXXXXXXX')) <> min(NVL(CCNUMBER,'000000000000000000'))

Open in new window

0
 
LVL 73

Assisted Solution

by:sdstuber
sdstuber earned 250 total points
ID: 20312988
you'll need to nvl them to some dummy value
actually same thing applies to my query as well.
I noticed that as soon as I posted the hole in angeliii's query, mine had the same hole.  :)

SELECT *
  FROM (SELECT ponum, ccnumber, COUNT(DISTINCT NVL(ccnumber, -999)) OVER(PARTITION BY ponum) cnt
          FROM my_table)
 WHERE cnt > 1;

select PONUM  , max(nvl(CCNUMBER,-999)), min(nvl(CCNUMBER,-999))
from yourtable
GROUP BY PONUM
HAVING max(nvl(CCNUMBER,-999)) <> min(nvl(CCNUMBER,-999))





0
 
LVL 73

Expert Comment

by:sdstuber
ID: 20313062
note,  my version of angeliii's updated query doesn't return the same results as his updated version.

If all ccnumbers for a ponum are null, I count that as the same ccnumber.
angeliii does not

both are reasonable answers to your question, only you can decide which is more appropriate for your application though.


We both count a mix of null and not null as different ccnumber's.




0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Join & Write a Comment

Cursors in Oracle: A cursor is used to process individual rows returned by database system for a query. In oracle every SQL statement executed by the oracle server has a private area. This area contains information about the SQL statement and the…
I remember the day when someone asked me to create a user for an application developement. The user should be able to create views and materialized views and, so, I used the following syntax: (CODE) This way, I guessed, I would ensure that use…
This video shows how to recover a database from a user managed backup
Via a live example, show how to restore a database from backup after a simulated disk failure using RMAN.

744 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

14 Experts available now in Live!

Get 1:1 Help Now