2016-12-28 18 views
2

私が持っているこのSELECT同じコード持ついくつかの値入会:のSQL Server 2014 Expressの上

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 

そして私は私にそれらを返すSELECT必要このような名前の人の電話を盗む:

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

ありがとうございます!

+1

電話番号の最大数はご存知ですか? –

+1

CSV形式の数字の1文字列はOKですか? – Bohemian

+0

私は10の最大値を持っています – jinfo

答えて

3

あなたは携帯電話の最大数を持っていて、DYNAMIC行く必要がない場合は、条件付きの集約はあなただけ、あなたが何かを行うことができます10の電話番号の最大値を持って考えるとトリック

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 HA!ダイナミックではありません:) –

+0

ありがとう、私は試してみましょう、私は最大10あります – jinfo

0

を行うことができます...

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

PIVOTがエラーを返した後のコード – jinfo

関連する問題