SQL Server 2008中 - 透视上的一列,由另一组,维持参考第三(SQL Server 2

2019-10-19 23:11发布

我刚开始学习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

我知道我需要通过[OperationSessionRecordID]从我的输入表和组UNPIVOT上[questionid] /支点,但已经看了很多 其他 的问题我还是很坚持。

基于这个答案我有这到目前为止,但我不知道如何着手,因为我有一个表的工作,因此不需要内部联接。

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;

当我运行这个它抛出这个错误,所以什么明显错了我的使用ROW_NUMBER的。

消息4112,级别15,状态1,第6行分级功能“ROW_NUMBER”必须有一个ORDER BY子句。

非常感激任何的帮助!

SB

Answer 1:

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

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

你不需要做什么特别的,以获得分组OperationSessionRecordID -实质上,在未提及的每个列PIVOT是分组列。



Answer 2:

请试试:

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


文章来源: SQL Server 2008 - Pivot on one column, group by another, maintain reference to third