2016-12-28 58 views
2

我的SQL Server 2014快速這種選擇一些值:加入具有相同的代碼

SELECT DISTINCT Name, Lastname, Phone1, Phone2, Phone3, ... PhoneN 
FROM TableX 
WHERE Phone1 <> '' 

而現在的結果是這樣的:

Name Lastname Phone1  Phone2  Phone3  ... 
James Brown  68798768 
James Brown  98761456 
Alice Grey  66687974 
Peter Thompson 87997555 
Peter Thompson 87997444 
Peter Thompson 87997333 

我需要一個選擇返回我他們用同樣的名字打電話給這樣的人:

Name Lastname Phone1  Phone2  Phone3  ... 
James Brown  68798768 98761456 
Alice Grey  66687974 
Peter Thompson 87997555 87997444 87997333 

任何查詢?

謝謝!

+1

你知道最多的電話號碼嗎? –

+1

CSV格式的單個數字字符串可以嗎? – Bohemian

+0

我最多可以有10個 – jinfo

回答

3

如果你有手機的最大數目,你不需要去動態的,有條件的聚集可能做的伎倆

Select Name 
     ,LastName 
     ,Phone1 = max(case when RN=1 then Phone1 else '' end) 
     ,Phone2 = max(case when RN=2 then Phone1 else '' end) 
     ,Phone3 = max(case when RN=3 then Phone1 else '' end) 
     ,Phone4 = max(case when RN=4 then Phone1 else '' end) 
From (
     Select * 
       ,RN = Row_Number() over (Partition By Name,LastName Order By Phone1) 
     From YourTable 
     ) A 
Group By Name,LastName 
+0

正在找你:) – GurV

+1

@GurwinderSingh哈!不DYNAMIC :) –

+0

謝謝,我會盡力,我有最多10 – jinfo

0

考慮你只有最多10個電話號碼,你可以做一些事情像......

Select * 
FROM (
     Select * 
      ,'Phone-' + CAST(ROW_NUMBER() OVER (PARTITION BY Name, LastName 
         ORDER BY Phone1) AS VARCHAR(10)) PhoneNum 
     FROM TableName 
    ) t 
PIVOT (MAX(Phone1) 
     FOR PhoneNum 
     IN ([Phone-1],[Phone-2],[Phone-3],[Phone-4],[Phone-5], 
      [Phone-6],[Phone-7],[Phone-8],[Phone-9],[Phone-10]) 
     )p 
+0

The PIVOT返回錯誤後的代碼 – jinfo

相關問題