SQL计数和合并
我正在设置一个查询来更改表单的数据,计算数据并格式化它。现在我得到了一个包含垂直数据的表格。数据如下图所示。 我想做的是根据数字创建Group by,然后计算特定TypePak的次数,并将其向右拆分。如右图所示 我试过做Pivot,它在一定程度上帮助了我,但这不是一个好方法。然后我尝试了XML路径 支点 XML路径SQL计数和合并,sql,sql-server,Sql,Sql Server,我正在设置一个查询来更改表单的数据,计算数据并格式化它。现在我得到了一个包含垂直数据的表格。数据如下图所示。 我想做的是根据数字创建Group by,然后计算特定TypePak的次数,并将其向右拆分。如右图所示 我试过做Pivot,它在一定程度上帮助了我,但这不是一个好方法。然后我尝试了XML路径 支点 XML路径 select distinct Number, abc = STUFF(( select ',' + TypePak from des_ombouw t1
select distinct Number, abc = STUFF((
select ',' + TypePak
from des_ombouw t1
where t1.Number = t2.Number
FOR XML PATH ('')),1,1,'')
from des_ombouw t2
在图像中是我想要的。还有更多的列需要添加,比如一些包的重量。
还有一个问题是,会有更多的专栏,所以这还不是全部 使用
row\u number()
的两个聚合步骤可以实现您想要的功能:
select d.number,
max(case when seqnum = 1 then cnt end) as cnt_1,
max(case when seqnum = 1 then typepak end) as typepak_1,
max(case when seqnum = 2 then cnt end) as cnt_2,
max(case when seqnum = 2 then typepak end) as typepak_2,
max(case when seqnum = 3 then cnt end) as cnt_3,
max(case when seqnum = 3 then typepak end) as typepak_3,
max(case when seqnum = 4 then cnt end) as cnt_4,
max(case when seqnum = 4 then typepak end) as typepak_4
from (select d.number, d.typepak, count(*) as cnt,
row_number() over (partition by d.number order by count(*) desc) as seqnum
from dbo.des_ombouw d
) d
group by d.number
这个形象被打破了。但是,与其尝试重新加载,不如不要。如果您正在提供数据,则最好将其作为表格格式的
文本
或DDL和DML语句来接收。@Larnu我已将图像添加到文本中。“但是,不要尝试重新加载它,而要尝试重新加载它。”
select d.number,
max(case when seqnum = 1 then cnt end) as cnt_1,
max(case when seqnum = 1 then typepak end) as typepak_1,
max(case when seqnum = 2 then cnt end) as cnt_2,
max(case when seqnum = 2 then typepak end) as typepak_2,
max(case when seqnum = 3 then cnt end) as cnt_3,
max(case when seqnum = 3 then typepak end) as typepak_3,
max(case when seqnum = 4 then cnt end) as cnt_4,
max(case when seqnum = 4 then typepak end) as typepak_4
from (select d.number, d.typepak, count(*) as cnt,
row_number() over (partition by d.number order by count(*) desc) as seqnum
from dbo.des_ombouw d
) d
group by d.number