SQL Server 2008-以一列为轴心,按另一列分组,维护对第三列的引用

SQL Server 2008-以一列为轴心,按另一列分组,维护对第三列的引用,sql,sql-server-2008,pivot,Sql,Sql Server 2008,Pivot,我刚刚开始学习SQL,正在努力正确地转换三列表 以下是我的出发点: questionid | DebriefingQuestionResults | OperationSessionRecordID ------------------------------------------------------------------ 32 | 3 | 8071 34 | 0

我刚刚开始学习SQL,正在努力正确地转换三列表

以下是我的出发点:

questionid | DebriefingQuestionResults | OperationSessionRecordID
------------------------------------------------------------------
32         |        3                  | 8071
34         |        0                  | 8071
36         |        1                  | 8071
32         |        2                  | 8074
34         |        6                  | 8074
36         |        5                  | 8074
以下是我想要制作的:

    OperationSessionRecordID | 32 | 34 | 36
----------------------------------------------
    8071                     | 3  | 0  | 1       
    8074                     | 2  | 6  | 5
只有三个[questionid]值(32、34和36),但大约有12000个[OperationSessionRecordID]值。所有列的类型均为
int not null

我知道我需要从我的输入表中取消[questionid]的pivot/pivot,并按[OperationsSessionRecordID]分组,但查看之后,我仍然非常困惑

基于此,到目前为止我已经知道了这一点,但不确定如何继续,因为我正在处理一个表,因此不需要内部联接

SELECT [32], [34], [36]
FROM
(
    SELECT A.questionid, A.DebriefingQuestionResults
    , row_number() over(partition by a.OperationSessionRecordID)
    FROM dbo.TEMPtable AS A
) AS P
PIVOT
(
  min(P.Value)
  for P.questionid in ([32], [34], [36])
) AS PIV;
当我运行这个时,它抛出了这个错误,所以我使用的行数显然有问题

Msg 4112,第15级,状态1,第6行 排名函数“row_number”必须具有ORDER BY子句

任何帮助都将不胜感激


SB

这是一个非常直接的支点。只是:

SELECT OperationSessionRecordID, [32],[34],[38]
FROM TEMPtable
  PIVOT (
  min(DebriefingQuestionResults)
  for questionid in ([32], [34], [36])
) AS PIV;

您不需要做任何特殊的操作就可以通过
OperationsSessionRecordId
获得分组-本质上,
PIVOT
中未提及的每一列都是分组列。

这是一个非常简单的PIVOT。只是:

SELECT OperationSessionRecordID, [32],[34],[38]
FROM TEMPtable
  PIVOT (
  min(DebriefingQuestionResults)
  for questionid in ([32], [34], [36])
) AS PIV;

您不需要做任何特殊的操作就可以通过
OperationsSessionRecordId
获得分组-本质上,
PIVOT
中未提及的每一列都是分组列。

这是一个非常简单的PIVOT。只是:

SELECT OperationSessionRecordID, [32],[34],[38]
FROM TEMPtable
  PIVOT (
  min(DebriefingQuestionResults)
  for questionid in ([32], [34], [36])
) AS PIV;

您不需要做任何特殊的操作就可以通过
OperationsSessionRecordId
获得分组-本质上,
PIVOT
中未提及的每一列都是分组列。

这是一个非常简单的PIVOT。只是:

SELECT OperationSessionRecordID, [32],[34],[38]
FROM TEMPtable
  PIVOT (
  min(DebriefingQuestionResults)
  for questionid in ([32], [34], [36])
) AS PIV;
通过
OperationsSessionRecordId
获取分组不需要做任何特殊的操作-本质上,
PIVOT
中未提及的每一列都是分组列。

请尝试:

select 
    * 
From(
        select * From tbl
    )x pivot
    (
        min(DebriefingQuestionResults) for questionid in ([32],[34],[36])
    )piv
请尝试:

select 
    * 
From(
        select * From tbl
    )x pivot
    (
        min(DebriefingQuestionResults) for questionid in ([32],[34],[36])
    )piv
请尝试:

select 
    * 
From(
        select * From tbl
    )x pivot
    (
        min(DebriefingQuestionResults) for questionid in ([32],[34],[36])
    )piv
请尝试:

select 
    * 
From(
        select * From tbl
    )x pivot
    (
        min(DebriefingQuestionResults) for questionid in ([32],[34],[36])
    )piv

在除以后关闭括号。@Mihai啊,是的,很好!编辑以反映这一点。在按分割后关闭括号。@Mihai啊,是的,很好!编辑以反映这一点。在按分割后关闭括号。@Mihai啊,是的,很好!编辑以反映这一点。在按分割后关闭括号。@Mihai啊,是的,很好!编辑以反映这一点。干杯,完全符合我的要求。谢谢你也解释了PIVOT函数。干杯,工作完全符合我的要求。谢谢你也解释了PIVOT函数。干杯,工作完全符合我的要求。谢谢你也解释了PIVOT函数。干杯,工作完全符合我的要求。谢谢你也解释了PIVOT函数。谢谢你。工作完美。我接受了另一个答案,因为这里有更多的解释,说明了它的作用以及为什么需要采用这种格式。(某人:)谢谢你。工作完美。我接受了另一个答案,因为这里有更多的解释,说明了它的作用以及为什么需要采用这种格式。(某人:)谢谢你。工作完美。我接受了另一个答案,因为这里有更多的解释,说明了它的作用以及为什么需要采用这种格式。(某人:)谢谢你。工作完美。我接受了另一个答案,因为这里有更多的解释,说明了它的作用以及为什么需要采用这种格式。(某人:)