SELECT A.ClaimKey, CASE WHEN A.MinClaim > B.MinClaim THEN 'Y' ELSE 'N' END AS YesOrNoBefore, CASE WHEN A.MinClaim > B.MinClaim THEN 'N' ELSE 'Y' END AS YesOrNoAfterFROM ( SELECT ClaimKey, MIN(ClaimSequenceNumber) MinClaim FROM TESTTABLE WHERE YesOrNo='N' GROUP BY ClaimKey )A , ( SELECT ClaimKey, MIN(ClaimSequenceNumber) MinClaim FROM TESTTABLE WHERE YesOrNo='Y' GROUP BY ClaimKey )BWHERE A.ClaimKey = B.ClaimKey
-- Demo table structureDECLARE @ExampleAS TABLE( ClaimKey integer NOT NULL, SequenceNumber tinyint NOT NULL, SomeFlag bit NOT NULL, PRIMARY KEY (ClaimKey, SequenceNumber));-- Sample dataINSERT @Example (ClaimKey, SequenceNumber, SomeFlag)VALUES (1002343, CONVERT(tinyint, 1), CONVERT(bit, 'true')), (1002343, CONVERT(tinyint, 2), CONVERT(bit, 'false')), (1002343, CONVERT(tinyint, 3), CONVERT(bit, 'false')), (1008976, CONVERT(tinyint, 1), CONVERT(bit, 'true')), (1008976, CONVERT(tinyint, 2), CONVERT(bit, 'true')), (1008976, CONVERT(tinyint, 3), CONVERT(bit, 'true')), (1008976, CONVERT(tinyint, 4), CONVERT(bit, 'false'));
-- Self-joinSELECT ThisRow.ClaimKey, ThisRow.SequenceNumber, ThisFlag = ThisRow.SomeFlag, PreviousFlag = Previous.SomeFlagFROM @Example AS ThisRowJOIN @Example AS Previous ON Previous.ClaimKey = ThisRow.ClaimKey AND Previous.SequenceNumber = ThisRow.SequenceNumber - CONVERT(tinyint, 1)WHERE ThisRow.SomeFlag <> Previous.SomeFlag
CREATE TABLE Claims(claim_nbr CHAR(7) NOT NULL CHECK (claim_nbr LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),claim_seq SMALLINT NOT NULLCHECK (claim_seq > 0),PRIMARY KEY (claim_nbr, claim_seq),screwup_flg CHAR(1) NOT NULLCHECK (screwup_flg IN ('Y','N'));