Search code examples
sqlmatchingrecords

SQL Server 2008 : PASS matching records


TableA (id int, batch char(15), mode char(10), match2 char(15), status char(15))

ID Match  MODE  match2 STATUS
1  ABC12   A     123
2  ABC12   A     123
3  ABC12   A     123
4  ABC12   B     234
5  ABC12   B     234
6  BCD32   A     456
7  BCD32   B     456

So, I need to populate Status with 'PASS' where mode = 'B' and

  1. For same match, if its corresponding mode A (ID1,2,3) if we talk about ABC12, It has different Match2.

So ID 4 and 5 will get "PASS".

Thanks in advance.


Solution

  • Try the following:

    CREATE TABLE TableA (id int, match char(15), mode char(10),match2 char(15), status char(15))
    
    
    INSERT INTO TableA (ID, Match,  MODE,  match2)
    SELECT 1,  'ABC12',   'A',     123 UNION
    SELECT 2,  'ABC12',   'A',     123 UNION
    SELECT 3,  'ABC12',   'A',     123 UNION
    SELECT 4,  'ABC12',   'B',     234 UNION
    SELECT 5,  'ABC12',   'B',     234 UNION
    SELECT 6,  'BCD32',   'A',     456 UNION
    SELECT 7,  'BCD32',   'B',     456 UNION
    SELECT 8,  'ABC23',   'A',     NULL UNION
    SELECT 9,  'ABC23',   'B',     789
    
    
    UPDATE
        t1
    SET
        status = 'PASS'
    FROM
        TableA AS t1
    JOIN
        TableA AS t2
    ON
        t1.id != t2.id
    AND t1.match = t2.match
    AND (t1.match2 != t2.match2 OR t2.match2 IS NULL)
    AND t2.mode = 'A'
    WHERE
        t1.mode = 'B'
    
    SELECT * FROM TableA