Это, кажется, делает свое дело (я рассмотрю другие ответы и сравню после публикации):
CREATE TABLE Trial(Col1 nvarchar(5) not null, Col2 int not null, Eliminated bit not null)
INSERT INTO Trial(Col1, Col2, Eliminated) VALUES('A', 1, 0)
INSERT INTO Trial(Col1, Col2, Eliminated) VALUES('A', 2, 0)
INSERT INTO Trial(Col1, Col2, Eliminated) VALUES('A', 3, 0)
INSERT INTO Trial(Col1, Col2, Eliminated) VALUES('A', 4, 0)
INSERT INTO Trial(Col1, Col2, Eliminated) VALUES('B', 1, 0)
INSERT INTO Trial(Col1, Col2, Eliminated) VALUES('B', 2, 0)
INSERT INTO Trial(Col1, Col2, Eliminated) VALUES('B', 3, 0)
INSERT INTO Trial(Col1, Col2, Eliminated) VALUES('C', 1, 0)
INSERT INTO Trial(Col1, Col2, Eliminated) VALUES('C', 2, 0)
INSERT INTO Trial(Col1, Col2, Eliminated) VALUES('C', 3, 0)
INSERT INTO Trial(Col1, Col2, Eliminated) VALUES('D', 1, 0)
UPDATE T0 SET Eliminated = 1
FROM Trial T0
JOIN (
SELECT Col1, COUNT(*) Dups
FROM Trial
WHERE Eliminated = 0
GROUP BY Col1) T1
ON T0.Col1 = T1.Col1
JOIN (
SELECT Col2, COUNT(*) Dups
FROM Trial
WHERE Eliminated = 0
GROUP BY Col2) T2
ON T2.Col2 = T0.Col2
WHERE T2.Dups > T1.Dups AND T1.Dups > 1
UPDATE T0 SET Eliminated = 1
FROM Trial T0
JOIN (
SELECT Col1, COUNT(*) Dups
FROM Trial
WHERE Eliminated = 0
GROUP BY Col1) T1
ON T0.Col1 = T1.Col1
JOIN (
SELECT Col2, COUNT(*) Dups
FROM Trial
WHERE Eliminated = 0
GROUP BY Col2) T2
ON T2.Col2 = T0.Col2
WHERE T1.Dups > T2.Dups AND T2.Dups > 1
UPDATE T0 SET Eliminated = 1
FROM Trial T0
JOIN (
SELECT Col1, Col2, ROW_NUMBER() OVER (PARTITION BY Col1 ORDER BY Col2) Dup
FROM Trial
WHERE Eliminated = 0) T1 ON T1.Col1 = T0.Col1 AND T1.Col2 = T0.Col2
JOIN (
SELECT Col1, Col2, ROW_NUMBER() OVER (PARTITION BY Col2 ORDER BY Col1) Dup
FROM Trial
WHERE Eliminated = 0) T2 ON T2.Col1 = T0.Col1 AND T2.Col2 = T0.Col2
WHERE T1.Dup <> T2.Dup
Возможно, это не идеально, но, похоже, работает с моими данными.