我有一个 TSQL 查询,它使用 PIVOT 创建名为Analyst
和Supervisor
从列中调用的ApprovalLevelName
列。
这是当前的输出:
在我的查询中,我有ApprovedTime
列和Status
列(在下面的查询中注释掉)。
我还想对这些进行 PIVOT,以便它们都出现在分析师和主管面前。即AnalystStatus
, SupervisorStatus
,AnalystApprovedTime
和SupervisorApprovedTime
.
下面是我希望它看起来的样子......
我怎样才能做到这一点?或者在SQL中有可能吗?我尝试使用APPLY
另一个PIVOT
但没有成功。
询问:
SELECT PivotTbl.*
FROM
(
SELECT
Code
,Period
,Task
,ApprovalLevelName
,ApprovedBy
,CommentText
,CommentPostedBy
--,ApprovedTime
--,Status
FROM [Tasks].[TaskRecordDetail] tr
) AS SourceTbl
PIVOT
(
MAX(ApprovedBy)
FOR ApprovalLevelName IN ([Analyst],[Supervisor])
) AS PivotTbl
以下是没有 a 的数据的外观PIVOT
:
如果这些是唯一
ApprovalLevelName
可能的两个值,并且暂时忽略您想要对注释执行的操作(因为两行都可能有注释),那么这是一种不PIVOT
显式使用但仍能获得所需结果的方法。表格和样本数据:
询问:
那里有一些重复,如果你有更多的水平,它会上升。尽管如此,虽然
PIVOT
作为一个高级概念可能看起来更简单,但它也是为更简单的情况而设计的,当所有可能的输出值都已知时,这种解决方案更具可扩展性(并且性能应该相似)。查询结果似乎符合您的要求:
不要忘记清理: