2013-10-06 34 views
1

我有一個數據文件,它有許多重複的值。我想要識別原始值和重複值,並將原始值和重複值並排排列。在扭曲的表格中找到重複的值

我的數據文件的標題是這樣的數據一起:

enter image description here

我想要的數據是這樣的:

enter image description here

我已經找到了重複的值使用以下查詢:

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

它只顯示重複值。不過,我不知道如何將原始值和重複值以及兩個相關聯的數據並排排列。請有人幫助我嗎?

+0

是否必須在一個查詢? –

+0

如何識別重複值和原始值?任何列像創建日期或標誌爲積極無效等。 –

+0

任何將圖像更改爲可剪切和粘貼的機會。 – Laurence

回答

0

這樣的事情呢?你使用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 
1

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