Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to get unique value in Oracle

My Query:

select unique f.documentname,f.projectname,f.documentdescription,
f.P0BUSINESSUNIT,f.P0ZONENAME,f.P0REGIONNAME,f.P0GROUPNAME,l.processname,
f.ORIGINALCREATIONDATE 
from p0findoc f, lcstep@sdrcpadm l 
where f.inlifecyclename IS Not Null and 
f.INLIFECYCLESTEP in (select l.LIFECYCLESTEP  from lcstep@sdrcpadm ) and ORIGINALCREATIONDATE > '2021/01/01' 
order by f.P0BUSINESSUNIT,f.P0ZONENAME,f.P0REGIONNAME,f.P0GROUPNAME ;

Output:

DocumentName, Project Name, Doc Description...so on

PD71017 311503  Change Order 1  CIS Americas CIS    Brazil CIS  Not Applicable  Deliver Services    2021/05/04-14:50:07:998

PD71017 311503  Change Order 1  CIS Americas CIS    Brazil CIS  Not Applicable  Notification    2021/05/04-14:50:07:998

PD71017 311503  Change Order 1  CIS Americas CIS    Brazil CIS  Not Applicable  PRJ Notification    2021/05/04-14:50:07:998

PD71017 311503  Change Order 1  CIS Americas CIS    Brazil CIS  Not Applicable  Request CSS Closure 2021/05/04-14:50:07:998

PD71017 311503  Change Order 1  CIS Americas CIS    Brazil CIS  Not Applicable  Validation Failure  2021/05/04-14:50:07:998

PD73834 311503  Change Order 4  CIS Americas CIS    Brazil CIS  Not Applicable  Deliver Services    2021/09/13-17:24:18:433

PD73834 311503  Change Order 4  CIS Americas CIS    Brazil CIS  Not Applicable  Notification    2021/09/13-17:24:18:433

Here in above output i want to have unique value only for column ‘document name’ that is PDxxxx. there are multiple values for column process name so wanted to have just one.

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

If you want one (any) process name, then take e.g. "first" or "last" (min or max), but you’ll have to aggregate on all other columns (which also means that you don’t need unique any more):

  SELECT f.documentname,
         f.projectname,
         f.documentdescription,
         f.p0businessunit,
         f.p0zonename,
         f.p0regionname,
         f.p0groupname,
         MAX (l.processname) processname,
         f.originalcreationdate
    FROM p0findoc f
         JOIN lcstep@sdrcpadm l ON f.inlifecyclestep = l.lifecyclestep
   WHERE     f.inlifecyclename IS NOT NULL
         AND originalcreationdate > DATE '2021-01-01'
GROUP BY f.documentname,
         f.projectname,
         f.documentdescription,
         f.p0businessunit,
         f.p0zonename,
         f.p0regionname,
         f.p0groupname,
         f.originalcreationdate
ORDER BY f.p0businessunit,
         f.p0zonename,
         f.p0regionname,
         f.p0groupname;

Also, you’d rather not compare dates to strings; that’s why I used date literal in where clause. Finally, switched to JOIN.

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading