Поиск повторяющихся значений в таблице с завихрением

У меня есть файл данных, который имеет много повторяющихся значений. Я хочу, чтобы как исходные, так и повторяющиеся значения были идентифицированы, а оригинальные и повторяющиеся значения должны быть упорядочены бок о бок.

Заголовки файлов My Data похожи на следующие данные:

Я хочу, чтобы данные были такими:

Я уже нашел повторяющиеся значения, используя следующий запрос:

SELECT a.[wallet] into KYCNew2
 from [dbo].[KYCNew1] A
GROUP BY a.[wallet]
 HAVING COUNT(*) > 1

Он показал только повторяющиеся значения. Однако я не знаю, как сделать оригинальные и повторяющиеся значения и обе их связанные данные бок о бок. Кто-нибудь мне поможет?

2 ответа

Сочетание row_number() и pivot сделает это. Вам нужно знать максимальное количество дубликатов перед раздачей, чтобы увидеть все.

Select
 account,
 [1] as path1,
 [2] as path2
From (
 select
 account,
 path,
 row_number() over (partition by account order by path) r
 From
 Dups
 ) x
pivot (
 min(path)
for 
 r in ([1], [2])
) piv

Example Fiddle


Как насчет чего-то подобного? где вы используете row_number для присоединения к таблице кошелька.

;with wallet as (
select
 '01703136838 (1)' as [Account Name], 'X:\Scanned KYC\All Scanned' as [Path]
union all select
 '01703136838 (1)' as [Account Name], 'X:\Scanned KYC\All Scanned' as [Path]
union all select
 '01703136838 (2)' as [Account Name], 'X:\Scanned KYC\All Scanned' as [Path]
union all select
 '01703136838 (2)' as [Account Name], 'X:\Scanned KYC\All Scanned' as [Path] 
union all select
 '01703136875 (1)' as [Account Name], 'X:\Scanned KYC\All Scanned' as [Path] 
union all select
 '01703136852 (2)' as [Account Name], 'X:\Scanned KYC\Backup All' as [Path] 
union all select
 '01703136852 (2)' as [Account Name], 'X:\Scanned KYC\Backup All' as [Path] 
union all select
 '01703136858 (2)' as [Account Name], 'X:\Scanned KYC\Backup All' as [Path] 
 ),
orderby as 
(select
 ROW_NUMBER () OVER( PARTITION BY [account name], [path] order by [account name]) as rid
 ,[account name]
 ,[path]
from
 wallet)
select
 a.[account name]
 ,a.[path]
 ,b.[path] + case when a.[path] like '%backup%' then '\b' else '\a' end
from
 orderby as a left join orderby as b
 on a.[account name] = b.[account name] and a.rid = b.rid - 1
where
 a.rid = 1

licensed under cc by-sa 3.0 with attribution.