使用Pivot将SQL Server中的行转换为列

使用Pivot将SQL Server中的行转换为列,sql,sql-server-2012,Sql,Sql Server 2012,我是pivot新手,我有一张如下表。它有型号和组,没有详细信息。该表包含10个不同的组 我正试图达到这样的结果。只想列出每组下的所有模型 我尝试了这个SQL查询,但在这里我得到了部分结果。它只显示一行 SELECT * FROM ( SELECT DISTINCT ModelNo ,GroupNo FROM #Table ) d pivot(max(ModelNo) FOR GroupNo IN ( [1]

我是pivot新手,我有一张如下表。它有型号和组,没有详细信息。该表包含10个不同的组

我正试图达到这样的结果。只想列出每组下的所有模型

我尝试了这个SQL查询,但在这里我得到了部分结果。它只显示一行

SELECT *
FROM (
    SELECT DISTINCT ModelNo
        ,GroupNo
    FROM #Table
    ) d
pivot(max(ModelNo) FOR GroupNo IN (
            [1]
            ,[2]
            ,[3]
            ,[4]
            ,[5]
            ,[6]
            ,[7]
            ,[8]
            ,[9]
            ,[10]
            )) piv

我不知道我在哪里失踪。请帮我整理一下。

我建议使用条件聚合,而不是枢轴-——它的功能更为广泛

您需要的是
行号()
,因此查询如下所示:

select max(case when groupno = 1 then modelno end) as group_01,
       max(case when groupno = 2 then modelno end) as group_02,
       . . .
from (select t.*,
             row_number() over (partition by groupno order by modelno) as seqnum
      from t
     ) t
group by seqnum;

您还可以将此想法合并到
透视图中。

我希望这种方法在处理百万条记录时也能表现得更好,因为我刚刚给出了一个样本数据集。非常感谢你的方法。当我这样尝试时,结果分散在整个团队中。是否可以在每个组下显示不同的型号。@StackUser。我不明白你说的“分散在整个团体”是什么意思。也许您只需要按seqnum下单。如果这不能解决问题,您可以设置一个dbfiddle。对不起@Gordon Linoff,您的SQL查询没有问题。这完全是我的错。你太棒了。非常感谢。我选择了你的答案,也投了赞成票。在过去的8个小时里,我一直在努力,为了得到这个结果,我撞到了头。