, , , , - . :
WITH cte AS(SELECT hs.NAME Highschooler ,
hs.grade inGrade1 ,
hs2.NAME likes ,
hs2.grade inGrade2 ,
ROW_NUMBER() OVER (PARTITION BY CASE WHEN l.id1 < l.id2 THEN l.id1
ELSE l.id2 END,
CASE WHEN l.id1 < l.id2 THEN l.id2
ELSE l.id1 END
ORDER BY (SELECT NULL)) rn
FROM highschooler hs
JOIN likes l ON hs.id = l.id1
JOIN highschooler hs2 ON hs2.id = l.id2)
SELECT * FROM cte WHERE rn = 1
:
DECLARE @t TABLE ( id1 INT, id2 INT )
INSERT INTO @t
VALUES ( 1, 2 ),
( 2, 1 ),
( 1, 3 ),
( 5, 6 ),
( 6, 5 ),
( 7, 8 );
WITH cte AS(SELECT * ,
ROW_NUMBER() OVER (PARTITION BY CASE WHEN id1 < id2 THEN id1
ELSE id2 END,
CASE WHEN id1 < id2 THEN id2
ELSE id1 END
ORDER BY (SELECT NULL)) rn
FROM @t)
SELECT * FROM cte WHERE rn = 1
:
id1 id2 rn
1 2 1
1 3 1
5 6 1
7 8 1