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)的
给该组赋值