I have a table similar to:-
+----+---+---+
| Id | A | B |
+----+---+---+
| 1 | 1 | 2 |
+----+---+---+
| 2 | 2 | 1 |
+----+---+---+
| 3 | 3 | 4 |
+----+---+---+
| 4 | 0 | 5 |
+----+---+---+
| 5 | 5 | 0 |
+----+---+---+
I want to remove all duplicate pairs of values, regardless of which column contains which value, e.g. after whatever the query might be I want to see:-
+----+---+---+
| Id | A | B |
+----+---+---+
| 1 | 1 | 2 |
+----+---+---+
| 3 | 3 | 4 |
+----+---+---+
| 4 | 0 | 5 |
+----+---+---+
I’d like to find a solution in Microsoft SQL Server (has to work in <= 2005, though I’d be interested in any solutions which rely upon >= 2008 features regardless).
In addition, note that A and B are going to be in the range 1-100 (but that’s not guaranteed forever. They are surrogate seeded integer foreign keys, however the foreign table might grow to a couple hundred rows max).
I’m wondering whether I’m missing some obvious solution here. The ones which have occurred all seem rather overwrought, though I do think they’d probably work, e.g.:-
- Have a subquery return a bitfield with each bit corresponding to one of the ids and use this value to remove duplicates.
- Somehow, pivot, remove duplicates, then unpivot. Likely to be tricky.
Thanks in advance!
Try: