Использование:
SELECT x.*
FROM (SELECT s.*,
ROW_NUMBER() OVER(PARTITION BY s.fk
ORDER BY s.pk) rnk
FROM YOUR_TABLE s) x
WHERE x.rnk = 1
... или использование CTE (без разницы в производительности):
WITH example AS (
SELECT s.*,
ROW_NUMBER() OVER(PARTITION BY s.fk
ORDER BY s.pk) rnk
FROM sample s)
SELECT x.*
FROM example x
WHERE x.rnk = 1
Подтверждение:
WITH sample AS (
SELECT 1 AS PK, 11 AS FK, 'A' AS [TYPE]
UNION ALL
SELECT 2 AS PK, 11 AS FK, 'B' AS [TYPE]
UNION ALL
SELECT 3 AS PK, 12 AS FK, 'B' AS [TYPE]
UNION ALL
SELECT 4 AS PK, 13 AS FK, 'C' AS [TYPE]
UNION ALL
SELECT 5 AS PK, 13 AS FK, 'D' AS [TYPE]
UNION ALL
SELECT 6 AS PK, 14 AS FK, 'D' AS [TYPE])
SELECT x.*
FROM (SELECT s.*, ROW_NUMBER() OVER(PARTITION BY s.fk
ORDER BY s.pk) rnk
FROM sample s) x
WHERE x.rnk = 1
Результат:
pk fk type
----------------
1 11 A
3 12 B
4 13 C
6 14 D