我试图得到一个没有聚合的数据结果,我尝试了max并且它没有帮助,可能是我做错了。
当我运行以下查询时
declare @t table
(
col1 int,
col2 varchar(100),
col3 varchar(100),
col4 varchar(100),
col5 int
)
insert into @t values(1,'test1','p1','v1',1)
insert into @t values(1,'test1','p2','v2',2)
insert into @t values(1, 'test1','p3','v3',3)
insert into @t values(1,'test1','p1','v11',1)
insert into @t values(1,'test1','p1','v12',1)
insert into @t values(1,'test1','p2','v21',2)
insert into @t values(1,'test1','p2','v22',2)
--select * from @t
select col1,
col2,
[p1],
[p2],
[p3]
from
(
select * from @t
) x
pivot
(
Max(col4 )
for col3 in ([p1],[p2],[p3])
) pvt
我得到以下结果
我想在结果下面得到这个
如果你能告诉我实现这一目标的途径,那就太好了。
答案 0 :(得分:7)
您仍然需要对PIVOT使用聚合函数,但是您需要某种值来根据col1
,col2
和{{1}的组合返回多行}。这是您想要使用像col3
这样的窗口函数的地方。
如果您使用以下查询,您应该能够得到结果:
row_number()
select col1, col2, p1, p2, p3
from
(
select col1, col2, col3, col4,
rn = row_number() over(partition by col1, col2, col3 order by col5, col4)
from @t
) d
pivot
(
max(col4)
for col3 in (p1, p2, p3)
) p;
函数创建一个由row_number()
,col1
和col2
值分区的唯一序列 - 然后我按col3
对结果进行排序和col5
值以按特定顺序创建序列。当数据透视表对数据进行分组时,将使用此新值,这会导致返回多行而不是单行。