Sql 显示文档存储过程--如何选择两次批准的文档。
我有一个场景,当任何用户第一次上传一个文档时,它就会被批准。首先是主管。主管批准/拒绝文件时,只有已批准的文件才能交给经理。然后,当经理批准/拒绝文件时,只有批准的文件才能交给董事进行最终批准 以下是当前的存储过程:Sql 显示文档存储过程--如何选择两次批准的文档。,sql,sql-server,stored-procedures,Sql,Sql Server,Stored Procedures,我有一个场景,当任何用户第一次上传一个文档时,它就会被批准。首先是主管。主管批准/拒绝文件时,只有已批准的文件才能交给经理。然后,当经理批准/拒绝文件时,只有批准的文件才能交给董事进行最终批准 以下是当前的存储过程: ALTER PROCEDURE [dbo].[ALLDOCUMNETS] AS begin SELECT dbo.DocumentInfo.DocID as DocumentID, dbo.DocumentInfo.DocName as Documen
ALTER PROCEDURE [dbo].[ALLDOCUMNETS]
AS
begin
SELECT dbo.DocumentInfo.DocID as DocumentID,
dbo.DocumentInfo.DocName as DocumentName,
dbo.DocumentInfo.Uploadfile as FileUploaded,
dbo.Userss.Email as UserEmail,
dbo.Department.DepType as Department,
dbo.DocType.DocType as Document,
dbo.DocumentInfo.UploadedBy as UploadedBy,
dbo.Approval.AppoveBy, dbo.ApproveType.ApproveType as Status
FROM dbo.DocumentInfo INNER JOIN
dbo.Approval ON dbo.DocumentInfo.DocID = dbo.Approval.DocID
inner JOIN dbo.Userss on Userss.UserName =dbo.DocumentInfo.UploadedBy inner
JOIN
dbo.ApproveType ON dbo.Approval.ApproveID =
dbo.ApproveType.ApproveID INNER JOIN
dbo.Department ON dbo.DocumentInfo.DepID = dbo.Department.DepID
INNER JOIN
dbo.DocType ON dbo.DocumentInfo.DocTypeID = dbo.DocType.DocTypeID
end
此sp的输出如下所示:
在上面的例子中,kanez是经理,sundus是主管
我只想让kanez批准的文件提交给主管进行最终批准。现在,主管和经理批准的文档都将提交给主管,但我只想向主管显示经理批准的文档
我该怎么做
桌子
如果您提供示例数据/表结构,那么我将提供比此更好的解决方案 下面的任何方法都可以解决,如果它不起作用,那么我将给出另一个解决方案(如果发送结构) 我假设DocId对于所有文档都是唯一的
ALTER PROCEDURE [dbo].[ALLDOCUMNETS]
AS
begin
;with x as
(SELECT ROW_NUMBER() over (partition by dbo.DocumentInfo.DocID
ORDER BY dbo.Approval.seqno desc) ID, dbo.DocumentInfo.DocID as DocumentID,
dbo.DocumentInfo.DocName as DocumentName,
dbo.DocumentInfo.Uploadfile as FileUploaded,
dbo.Userss.Email as UserEmail,
dbo.Department.DepType as Department,
dbo.DocType.DocType as Document,
dbo.DocumentInfo.UploadedBy as UploadedBy,
dbo.Approval.AppoveBy, dbo.ApproveType.ApproveType as Status
FROM dbo.DocumentInfo INNER JOIN
dbo.Approval ON dbo.DocumentInfo.DocID = dbo.Approval.DocID
inner JOIN dbo.Userss on Userss.UserName =dbo.DocumentInfo.UploadedBy inner
JOIN
dbo.ApproveType ON dbo.Approval.ApproveID =
dbo.ApproveType.ApproveID INNER JOIN
dbo.Department ON dbo.DocumentInfo.DepID = dbo.Department.DepID
INNER JOIN
dbo.DocType ON dbo.DocumentInfo.DocTypeID = dbo.DocType.DocTypeID
end) SELECT DocumentID,DocumentName,FileUploaded,UserEmail,
Department,Document,UploadedBy,AppoveBy,Status from x where X.Id=1
桌子结构不好 将中的UpdateDate更改为上一查询中的seqno desc
然后,您将获得最近一次更新的个人记录,无论他是什么人(我删除了之前的评论,因为您的回答使他的目标比问题更清晰)。干得好。。。但是,如果有经理批准的话,上面提到的不是会给他经理批准吗?否则,也会给他主管批准吗?若要仅向他提供经理批准的文档,请修改逻辑以选择具有两种不同批准的文档。使用上面的方法,仅当
其中X.Id=2
也存在时才报告其中X.Id=1
(例如,加入到其中)。或者:使用GROUP BY连接到SELECT,并通过具有COUNT(*)1的或具有MIN(dbo.Approval.seqno)MAX(dbo.Approval.seqno)的给该组赋值