Skip to content
Advertisement

Omit row if exists another row with the same ID and specific type

DataTable:

enter image description here

Any time an ID has a record where Type = A and a record where Type = B, I want to not include the record where Type = A.

SELECT * FROM DataTable
WHERE Type <> 'A'

This query does not work, because I still want to show the record where Type = A for ID 500.

Advertisement

Answer

You can use count() window analytic function with partitioning by ID column and then filter out rows with type equals A whenever count is greater than one :

with t2 as
(
select t.*, count(*) over (partition by ID order by ID,Qty ) as cnt
  from t
)
select type,ID,Qty
  from t2
 where ( type <> 'A' and  cnt > 1 ) or cnt <= 1

Demo

User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement