我想将一些行转换为列,同时保留其他行。
ID name value RefId
1 Fname John 32145
2 LName Smith 32145
3 Fname Peter 34589
4 LName Mahlang 34589
现在我想要实现的是将Fname
和Lname
行转换为具有匹配的value
字段的列。 ID
专栏并不重要,我不需要它。
所需输出
Fname Lname RefId
John Smith 32145
Peter Mahlang 34589
任何帮助
答案 0 :(得分:2)
使用条件聚合:
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