2017-05-17 12 views
2

他の行をそのまま維持しながら列の一部を列に変換したいと考えています。PIVOT 2列とそれ以外の列を維持する

ID  name  value  RefId 
1  Fname John  32145 
2  LName Smith  32145 
3  Fname Peter  34589 
4  LName Mahlang 34589 

は今、私が達成したいものを自分のマッチングvalueフィールドで列にFnameLname行を有効にすることです。 ID列は本当に問題ではありません。私はそれを必要としません。

所望の出力

 Fname  Lname  RefId 
     John  Smith  32145 
     Peter  Mahlang 34589 

すべてのヘルプ条件付き集約を使用して

答えて

1

select 
    Fname = max(case when name = 'Fname' then value end) 
    , Lname = max(case when name = 'Lname' then value end) 
    , RefId 
from t 
group by RefId 

rextesterデモ:http://rextester.com/MRMY11592

リターン:

+---------+---------+-------+ 
| Fname | Lname | RefId | 
+---------+---------+-------+ 
| John | Smith | 32145 | 
| Peter | Mahlang | 34589 | 
+---------+---------+-------+ 

それともpivot()

select 
    Fname 
    , Lname 
    , RefId 
from (select name, value, refid from t) s 
pivot(max(value) for name in ([Fname],[Lname]))p 
+0

おかげSqlZimを使用。それは完全に動作します。あなたの助けに感謝します。 –

+0

@BV_Data助けて嬉しいです! – SqlZim

関連する問題