SQL Server 2008-以一列为轴心,按另一列分组,维护对第三列的引用
我刚刚开始学习SQL,正在努力正确地转换三列表 以下是我的出发点:SQL Server 2008-以一列为轴心,按另一列分组,维护对第三列的引用,sql,sql-server-2008,pivot,Sql,Sql Server 2008,Pivot,我刚刚开始学习SQL,正在努力正确地转换三列表 以下是我的出发点: questionid | DebriefingQuestionResults | OperationSessionRecordID ------------------------------------------------------------------ 32 | 3 | 8071 34 | 0
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函数。谢谢你。工作完美。我接受了另一个答案,因为这里有更多的解释,说明了它的作用以及为什么需要采用这种格式。(某人:)谢谢你。工作完美。我接受了另一个答案,因为这里有更多的解释,说明了它的作用以及为什么需要采用这种格式。(某人:)谢谢你。工作完美。我接受了另一个答案,因为这里有更多的解释,说明了它的作用以及为什么需要采用这种格式。(某人:)谢谢你。工作完美。我接受了另一个答案,因为这里有更多的解释,说明了它的作用以及为什么需要采用这种格式。(某人:)