Jac*_*ack 0 sql t-sql sql-server sql-server-2012
我有一个说明字段的文件表
DocumentID int - PK and autoincrement
LastStatusChangedDateTime - datetime
JurisdictionID - int
DocumentStatusID - int
Run Code Online (Sandbox Code Playgroud)
现在我想引入一个名为的计算列CanChangeStatus.这就像一个队列.因此,如果文档是第一个,则可以更改其状态.这是我的查询:
Select d.DocumentID,
(
Select Cast(Case When d.DocumentID = v.DocumentID Then 1 Else 0 End as bit)
From
(
Select Top 1 DocumentID
From Documents
Where JurisdictionID = d.JurisdictionID
And
DocumentStatusID = d.DocumentStatusID
Order By LastStatusChangedDateTime
) v
) as CanChangeStatus
From Documents d
Run Code Online (Sandbox Code Playgroud)
指数是那里JurisdictionID和DocumentStatusID.罪魁祸首是子查询 - 我试图计算的方式CanChangeStatus.有什么方法可以加快速度或将此子查询转换为连接,因为连接大多比子查询快?
您应该可以使用聚合函数(SQLFiddle上的示例)执行此操作:
SELECT DocumentID,
CASE WHEN ROW_NUMBER() OVER ( PARTITION BY JurisdictionID, DocumentStatusID
ORDER BY LastStatusChangedDateTime )
= 1 THEN 1 ELSE 0 END AS Bit
FROM Documents
Run Code Online (Sandbox Code Playgroud)