SQL Pivot查询没有聚合或最大

Ese*_*sen 3 sql-server pivot

我试图得到一个没有聚合的枢轴结果,我试过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
Run Code Online (Sandbox Code Playgroud)

我得到以下结果

在此输入图像描述

我试图得到以下结果

在此输入图像描述

如果你能告诉我实现这一目标的途径,那就太好了.

Tar*_*ryn 7

您仍然需要使用聚合函数与PIVOT,但你需要某种价值回归基础上的组合多行col1,col2col3.这是你想要使用窗口函数的地方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;
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

row_number()函数创建一个由隔开的唯一序列col1,col2col3值-我便下令由你的结果col5col4值来创建特定的顺序的序列.当数据透视表对数据进行分组时,将使用此新值,这会导致返回多行而不是单行.