[英]Convert a column values to column names SQL server
我有一个具有以下架构的表。 希望获得与SQL Server中预期结果相同的结果。 由于“值”列为字符串,因此数据透视不起作用。 请提出实现此目标的有效方法。 谢谢!
表:
Dim Key(String) , Dim Value (String)
AB XY1
AB XY2
CD XY3
CD XY4
预期结果
New columns=> AB CD
Row values => XY1 XY3
XY2 XY4
您想要row_number()
:
select max(case when key = 'ab' then Value end) as ab,
max(case when key = 'cd' then Value end) as cd
from (select t.*,
row_number() over (partition by key order by Value) as seq
from table t
) t
group by seq;
但是,您的pivot
版本也应该与row_number()
。
编辑:
select tt.*
from (select t.*,
row_number() over (partition by [key] order by Value) as seq
from table t
) as t pivot
( max(value) for [key] in ([ab], [cd])
) tt;
自我加入应该起作用。 但是,您没有提供SQL的完整业务需求。
您期望哪个结果?
New columns=> AB CD
Row values => XY1 XY3
XY2 XY4
要么,
New columns=> AB CD
Row values => XY1 XY4
XY2 XY3
要么,
New columns=> AB CD
Row values => XY1
XY2
XY3
XY4
您的SQL看起来像这样,
select ab.value as "AB", cd.value as "CD"
from (select * from t where key='ab') ab
,(select * from t where key='cd') cd
但是上面的SQL给你这个结果,
New columns=> AB CD
Row values => XY1 XY3
XY2 XY3
XY1 XY4
XY2 XY4
您应该根据需要对SQL进行一些修改。 希望对您有所帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.