SQL计数和合并

SQL计数和合并,sql,sql-server,Sql,Sql Server,我正在设置一个查询来更改表单的数据,计算数据并格式化它。现在我得到了一个包含垂直数据的表格。数据如下图所示。 我想做的是根据数字创建Group by,然后计算特定TypePak的次数,并将其向右拆分。如右图所示 我试过做Pivot,它在一定程度上帮助了我,但这不是一个好方法。然后我尝试了XML路径 支点 XML路径 select distinct Number, abc = STUFF(( select ',' + TypePak from des_ombouw t1

我正在设置一个查询来更改表单的数据,计算数据并格式化它。现在我得到了一个包含垂直数据的表格。数据如下图所示。

我想做的是根据数字创建Group by,然后计算特定TypePak的次数,并将其向右拆分。如右图所示

我试过做Pivot,它在一定程度上帮助了我,但这不是一个好方法。然后我尝试了XML路径

支点

XML路径

  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