PIVOT 两列并保持其他列不变
PIVOT two columns and keep others as they are
我想将一些行变成列,同时保持其他行不变。
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
任何帮助
使用条件聚合:
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
returns:
+---------+---------+-------+
| 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
我想将一些行变成列,同时保持其他行不变。
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
任何帮助
使用条件聚合:
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
returns:
+---------+---------+-------+
| 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