我有一个具有以下架构的表。希望获得与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
答案 0 :(得分:5)
您想要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;
答案 1 :(得分:0)
自动加入应该起作用。但是,您没有提供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进行一些修改。希望对您有帮助!