Home > Net >  How to fetch only single type using Oracle SQL
How to fetch only single type using Oracle SQL

Time:09-24

I want to fetch only those company for which there is only one type. I am using using Oracle 12C. Below is the sample dataset

enter image description here

Result Set:-

enter image description here

Some one please help me on this.

CodePudding user response:

select companyid, min(type_) as type_
from   [table_name]
group  by companyid
having min(type_) = max(type_)
;

Replace [table_name] with your actual type name. Note also that I used type_ (with an underscore) for the column name. I hope your column name is not type, which is a reserved keyword; if it is, change it.

A possible alternative is to use having count(distinct(type_)) = 1 - but that is a poor solution. It requires a distinct operation within each group (by companyid). By contrast, min and max are much easier to keep track of.

CodePudding user response:

You can use not exists:

select t.*
from t
where not exists (select 1
                  from t t2
                  where t2.companyid = t.companyid and t2.type <> t.type
                 );

CodePudding user response:

Another way is to compare MIN(TYPE) for each company with its MAX(TYPE). If they're the same then it only has one TYPE.

SELECT CompanyId, Type
FROM myTable
WHERE COMPANYID IN (
  SELECT COMPANYID
  FROM myTable
  GROUP BY COMPANYID
  HAVING MIN(TYPE) = MAX(TYPE)
)
  • Related