I am asking for a solution where I can find duplicate entries in a table but one of those duplicate entries MUST contain a specific value otherwise it won’t come in the result.
For example, my table is like this:
| ID | Name | Type |
|---|---|---|
| 1 | Hassan | Commercial |
| 2 | Ahmed | Personal |
| 3 | Jack | Personal |
| 4 | Hassan | Commercial |
| 5 | Jack | Commercial |
| 6 | Charlie | Commercial |
Expected result:
| ID | Name | Type |
|---|---|---|
| 3 | Jack | Personal |
| 5 | Jack | Commercial |
See, I do not want Id No. 1 & 4 as they do not have ‘Personal’ Value in their ‘Type’ Column.
But, Id No. 3 & 5 match my requirement.
I have tried the following query:
SELECT ID
, Name
, Type FROM (
SELECT ID, Name, Type,
COUNT(*) OVER (PARTITION BY Name) AS cnt
FROM THIS_TABLE) AS t
WHERE t.cnt > 1
Thanks in Advance
Advertisement
Answer
Sounds like what you want is to first get the names of people with multiple account types
select name from this_table group by name having count(distinct type)>1
then dump the table for records matching those names.
select * from this_table where name in ( select name from this_table group by name having count(distinct type)>1 )