How to identify valid records based on column values in snowflake

Viewed 29

I have a table as below

InputTable

I want output like below

OutputTable

This means I have few predefined pairs, example

if one employee is coming from both HR_INTERNAL and HR_EXTERNAL, take only that record which is from HR_INTERNAL

if one employee is coming from both SALES_INTERNAL and SALES_EXTERNAL, take only that record which is from SALES_INTERNAL

etc.

Is there a way to achieve this? I used ROW_NUMBER to rank

ROW_NUMBER() OVER(PARTITION BY "EMPID" ORDER BY SOURCESYSTEM ASC) AS RANK_GID
1 Answers

I just put them on a table like this:

create or replace table  predefined_pairs ( pairs ARRAY );
insert into predefined_pairs select [ 'HR_INTERNAL', 'HR_EXTERNAL' ] ;
insert into predefined_pairs select [ 'SALES_INTERNAL', 'SALES_EXTERNAL' ] ;

Then I use the following query to produce the output you wanted:

select s.sourcesystem, s.empid,
CASE WHEN COUNT(1) OVER(PARTITION BY EMPID) = 1 THEN 'ValidRecord'
     WHEN p.pairs[0] IS NULL THEN 'ValidRecord'
     WHEN p.pairs[0] = s.sourcesystem THEN 'ValidRecord'
     ELSE 'InvalidRecord' 
END RecordValidity
from source s
left join predefined_pairs p on array_contains( s.sourcesystem::VARIANT, p.pairs ) ;

+-------------------+--------+----------------+
|   SOURCESYSTEM    | EMPID  | RECORDVALIDITY |
+-------------------+--------+----------------+
| HR_INTERNAL       | EMP001 | ValidRecord    |
| HR_EXTERNAL       | EMP001 | InvalidRecord  |
| SALES_INTERNAL    | EMP002 | ValidRecord    |
| SALES_EXTERNAL    | EMP002 | InvalidRecord  |
| HR_EXTERNAL       | EMP004 | ValidRecord    |
| SALES_INTERNAL    | EMP005 | ValidRecord    |
| PURCHASE_INTERNAL | EMP003 | ValidRecord    |
+-------------------+--------+----------------+
Related