Home > Enterprise >  How can I get key values belonging to multiple groups in my source data?
How can I get key values belonging to multiple groups in my source data?

Time:09-06

How can I get the RM_ID values the belonging to multiple groups in my source data?

I have two columns in my table: RM_ID and Group, with and data like this:

RM_ID GROUP
100 DEF
100 DEF
200 ABC
200 ABC
200 DEF
300 XYZ
300 XYZ
300 ABC
400 PQR
400 PQR
  • I want to identify all the RM_ID who belong to more than one group, and also retrieve the groups' names'.

  • How can I achieve that in Oracle?

    • Will the LEAD/LAG function help here?

Desired Result:

RM_ID GROUP
200 ABC
200 DEF
300 XYZ
300 ABC

CodePudding user response:

You can do it in a couple of steps. I'll use some CTE's to make it clearer.

First get the distinct pairs of values, Then use a window function to count the number of groups per RM_ID, and then select the records with more than 1 group.

WITH DISTINCT_PAIRS AS (
  SELECT DISTINCT
    RM_ID, 
    GROUP_
  FROM YOUR_TABLE), 

GROUP_COUNTER AS (
  SELECT 
    RM_ID, 
    GROUP_, 
    COUNT(1) OVER (PARTITION BY RM_ID) AS NO_OF_UNIQUE_GROUPS
  FROM DISTINCT_PAIRS
)

SELECT 
  RM_ID, 
  GROUP_
FROM GROUP_COUNTER 
WHERE NO_OF_UNIQUE_GROUPS > 1

Alternatively you can do it like this, a little less verbose:

SELECT DISTINCT
  RM_ID, 
  GROUP_
FROM YOUR_TABLE
WHERE RM_ID IN (
  SELECT 
    RM_ID
  FROM YOUR_TABLE
  GROUP BY RM_ID
  HAVING COUNT(DISTINCT GROUP_) > 1
)
  • Related