Я пытаюсь вернуть уникальные значения из одного поля «name» из двух таблиц, используя union и Row_number.
Мне нужно вернуть три столбца: ID, Caseid и Name, но только уникальные имена.Одно и то же имя появляется в View1 и Table2 несколько раз.
Идентификатор также уникален, поэтому я не могу использовать group by для достижения этой цели.
Ниже приведена моя попытка, которую я надеялся назначитьстрока № 1 к первому результату каждого имени, однако она не работает и выдает странные результаты, например, если есть два идентичных имени, она может дать номер строки 52. Другие результаты работают как целевые.
Сохранено как NewDistinctView
WITH cte1 AS
(
SELECT ID, Caseid, Title as Name
FROM View1
UNION
SELECT ID, CaseID, Name as Name
FROM Table2
WHERE (Party = 'Yes')),
cte2 as (SELECT ID, Caseid, Name, ROW_NUMBER() OVER (PARTITION BY Name ORDER BY ID DESC) AS rn
from cte1
)
SELECT *
FROM cte2
WHERE rn = 1
Table2
ID CASEID NAME PARTY
-------- ----------- -------------- -------
116524 486628439 Fiona T No
116525 486628439 DTZ Holdings Yes
384221 486628439 Clare S Yes
384222 486628439 David S YES
384223 486628439 Andrew P YES
View1
ID CASEID TITLE
----- ----------- --------------
591 486628439 DTZ Holdings
594 486628439 DTZ Holdings
592 486628439 Clare S
593 486628439 David S
595 486628439 David S
584 486628439 John B
585 486628439 John B
586 486628439 Anna A
587 486628439 Peter D
588 486628439 Peter D
589 486628439 Peter D
590 486628439 Peter D
Результаты, когда «где rn = 1» изменяется на «rn> 0», чтобы показать все rn
с * рядом с ошибочными результатами
ID CASEID NAME RN
-------- ----------- -------------- ----
592 486628439 Clare S 52*
593 486628439 David S 8*
584 486628439 John B 2
589 486628439 Peter D 2
384221 486628439 Clare S 1
384222 486628439 David S 1
116525 486628439 DTZ Holdings 3
586 486628439 Anna A 1
588 486628439 Peter D 3
384223 486628439 Andrew P 1
595 486628439 David S 7*
591 486628439 DTZ Holdings 5*
585 486628439 John B 1
590 486628439 Peter D 1
594 486628439 DTZ Holdings 4
587 486628439 Peter D 4
If, гдеrn = 1 "используется для отображения уникальных результатов, тогда Clare S не отображается, но rn по-прежнему не работает должным образом.
Буду признателен за любые мысли о том, как я могу добиться этого в качестве поправки нижеили другим способом?Я использую SQL Server 2016.
Большое спасибо за вашу помощь.