2017-05-17 3 views
2

Ich möchte einige der Zeilen in Spalten umwandeln, während andere Zeilen beibehalten werden, wie sie sind.PIVOT zwei Spalten und andere beibehalten, wie sie sind

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

Nun, was ich will erreichen, ist die Fname und Lname Zeilen in Spalten drehen mit ihrem value Feld übereinstimmen. ID Spalte ist nicht wirklich wichtig, ich brauche es nicht.

gewünschte Ausgabe

 Fname  Lname  RefId 
     John  Smith  32145 
     Peter  Mahlang 34589 

Jede Hilfe

Antwort

1

Bedingte Aggregation:

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 Demo: http://rextester.com/MRMY11592

kehrt:

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

Oder pivot()

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

Dank SqlZim verwenden. Es funktioniert perfekt. Vielen Dank für Ihre Hilfe. –

+0

@BV_Data Glücklich zu helfen! – SqlZim

Verwandte Themen