I believe that the suggestion I posted earlier returns the expected result:
DECLARE @game TABLE (
[GameBankID] [int] NOT NULL,
[productCode] nvarchar(20) NULL,
[productDescription] nvarchar(20) NULL,
[status] [int] NOT NULL
);
DECLARE @gamepins TABLE (
[Id] [int] NOT NULL,
[GameBankID] [int] NOT NULL,
[Pin] nvarchar(20) NULL,
[Serial] nvarchar(20) NULL
);
INSERT INTO @game SELECT 1,'a','product a',0
INSERT INTO @game SELECT 2,'b','product b',1
INSERT INTO @game SELECT 3,'c','product c',0
INSERT INTO @game SELECT 4,'a','product a',2
INSERT INTO @game SELECT 5,'a','product a',0
INSERT INTO @game SELECT 6,'a','product a',1
INSERT INTO @game SELECT 7,'d','product d',0
INSERT INTO @game SELECT 8,'a','product a',0
INSERT INTO @game SELECT 9,'c','product c',0
INSERT INTO @game SELECT 10,'c','product c',0
INSERT INTO @game SELECT 11,'a','product a',1
INSERT INTO @game SELECT 12,'a','product a',0
INSERT INTO @game SELECT 13,'c','product e',0
INSERT INTO @game SELECT 14,'c','product f',1
INSERT INTO @gamepins SELECT 1,1,'123','445rtg'
INSERT INTO @gamepins SELECT 2,2,'123','445rtg'
INSERT INTO @gamepins SELECT 3,3,'123','445rtg'
INSERT INTO @gamepins SELECT 4,4,'456','abc'
INSERT INTO @gamepins SELECT 5,5,'456','abc'
INSERT INTO @gamepins SELECT 6,6,'456','abc'
INSERT INTO @gamepins SELECT 7,7,'789','11ee'
INSERT INTO @gamepins SELECT 8,8,'789','11ee'
INSERT INTO @gamepins SELECT 9,9,'789','11ee'
INSERT INTO @gamepins SELECT 10,10,'456','abc'
INSERT INTO @gamepins SELECT 11,11,'erty','0090'
INSERT INTO @gamepins SELECT 12,12,'8888','90dpfjd'
INSERT INTO @gamepins SELECT 13,9,'789','11eef'
INSERT INTO @gamepins SELECT 14,9,'789','11eef';
with CTE_Count as
(
SELECT id, productCode, productDescription, status, gb.Pin, gb.Serial,
count(1) over(partition by gb.Pin, gb.Serial) as Qty,
max(status) over(partition by gb.Pin, gb.Serial) as MaxStatus
FROM @Game g
inner join @GamePins gb on g.GameBankID = gb.id
)
select * from CTE_Count
where Qty > 1 and MaxStatus = 0
Hope this help