【问题标题】:Show Documents by designation按指定显示文件
【发布时间】:2014-02-03 15:49:33
【问题描述】:

当只有主管批准/拒绝文件或待处理时,我想向用户显示此文件已批准/拒绝..

这是我尝试的存储过程

ALTER procedure [dbo].[spdocuments]
as
   SELECT    
      dbo.DocumentInfo.DocName as DocumentName,
      dbo.DocumentInfo.UploadedDate as UploadedDate , 
      dbo.DocumentInfo.Uploadfile as FileUploaded,   
      dbo.DocumentInfo.UploadedBy as  UploadedBy,
      dbo.Department.DepType as Department,
      dbo.Approval.ApproveDate,
      dbo.Approval.AppoveBy,
      dbo.ApproveType.ApproveType as Status
   FROM         
      dbo.DocumentInfo
   INNER JOIN
      dbo.Department ON dbo.DocumentInfo.DepID = dbo.Department.DepID 
   INNER JOIN
      dbo.Approval ON dbo.DocumentInfo.DocID = dbo.Approval.DocID 
   INNER JOIN
      dbo.ApproveType ON dbo.Approval.ApproveID = dbo.ApproveType.ApproveID 
   INNER JOIN
      dbo.ApproveType AS ApproveType_1 ON dbo.Approval.ApproveID = ApproveType_1.ApproveID
   WHERE      
      (dbo.Approval.DesigID = 3)

当我执行它时,它会显示这样的结果

╔══════════════╦══════════════╦══════════════════════╦════════════╦══════════════════╦═════════════╦══════════════╦══════════╗
║ DocumentName ║ UploadedDate ║     FileUploaded     ║ UploadedBy ║    Department    ║ ApproveDate ║   AppoveBy   ║  Status  ║
╠══════════════╬══════════════╬══════════════════════╬════════════╬══════════════════╬═════════════╬══════════════╬══════════╣
║ asdasd       ║ 2014-01-22   ║ CV.doc               ║ amna       ║ Human Resource   ║ 2014-01-22  ║ wajeeha      ║ Pending  ║
║ ERP SYSTEM   ║ 2014-01-20   ║ system admin.doc     ║ noreen     ║ Computer Science ║ 2014-01-22  ║ suman        ║ Approve  ║
║ asdasd       ║ 2014-01-22   ║ CV.docx              ║ amna       ║ Human Resource   ║ 2014-01-22  ║ suman        ║ Pending  ║
║ ERP SYSTEM   ║ 2014-01-20   ║ system admin .doc    ║ noreen     ║ Computer Science ║ 2014-02-03  ║ ayesha       ║ Pending  ║
║ asdasd       ║ 2014-01-22   ║ CV.docx              ║ amna       ║ Human Resource   ║ 2014-02-03  ║ ayesha       ║ Pending  ║
║ kanaban      ║ 2014-02-03   ║ Presentation1.pptx   ║ hira       ║ Finance          ║ 2014-02-03  ║ ayesha       ║ Approve  ║
║ ERP SYSTEM   ║ 2014-01-20   ║ system admin .docx   ║ noreen     ║ Computer Science ║ 2014-02-03  ║ wajeeha      ║ Pending  ║
║ def          ║ 2014-01-22   ║ BISE RAWALPINDI.docx ║ noreen     ║ Human Resource   ║ 2014-02-03  ║ wajeeha      ║ Approve  ║
║ kanaban      ║ 2014-02-03   ║ Presentation1.pptx   ║ hira       ║ Finance          ║ 2014-02-03  ║ wajeeha      ║ Pending  ║
║ def          ║ 2014-01-22   ║ BISE RAWALPINDI.docx ║ noreen     ║ Human Resource   ║ 2014-02-03  ║ suman        ║ Pending  ║
║ kanaban      ║ 2014-02-03   ║ Presentation1.pptx   ║ hira       ║ Finance          ║ 2014-02-03  ║ suman        ║ Pending  ║
╚══════════════╩══════════════╩══════════════════════╩════════════╩══════════════════╩═════════════╩══════════════╩══════════╝

在上表中记录两次或多次,我想要一次记录,因为表中的每条记录都是一次

【问题讨论】:

  • 期望得到什么结果?您当前的输出有什么错误
  • @marc_s 是对的。在您告诉我们哪里出了问题或“正确”是什么样子之前,我们无法提出解决方案。
  • 在上表中记录了两次或多次,我想要一次记录,因为表中的每条记录都是一次

标签: asp.net sql sql-server stored-procedures


【解决方案1】:

在您的原始问题中(在编辑之前),您说您希望所有“已批准”,然后所有“待定”(未批准)。您还提到某些已批准比其他更重要,但我无法从数据或您的描述中确定哪个。但是,此查询显示了如何获得 Approved(每个文档只有一行)和任何 Pending(尚未获得批准)。

顺便说一句,这也可以使用更多的连接语句而不是联合来完成,但有时这种格式更容易调试(因为您可以注释掉其中一个联合集或对其进行处理分开)。

--Approved
SELECT
  dbo.DocumentInfo.DocName as DocumentName,
  dbo.DocumentInfo.UploadedDate as UploadedDate , 
  dbo.DocumentInfo.Uploadfile as FileUploaded,   
  dbo.DocumentInfo.UploadedBy as  UploadedBy,
  dbo.Department.DepType as Department,
  Max(dbo.Approval.ApproveDate) AS ApproveDate,
  Max(dbo.Approval.AppoveBy) AS ApproveBy,
  dbo.ApproveType.ApproveType as Status
FROM         
  dbo.DocumentInfo
INNER JOIN
  dbo.Department ON dbo.DocumentInfo.DepID = dbo.Department.DepID 
INNER JOIN
  dbo.Approval ON dbo.DocumentInfo.DocID = dbo.Approval.DocID 
INNER JOIN
  dbo.ApproveType ON dbo.Approval.ApproveID = dbo.ApproveType.ApproveID 
GROUP BY 
  dbo.DocumentInfo.DocName as DocumentName,
  dbo.DocumentInfo.UploadedDate as UploadedDate, 
  dbo.DocumentInfo.Uploadfile as FileUploaded,   
  dbo.DocumentInfo.UploadedBy as  UploadedBy,
  dbo.Department.DepType as Department
WHERE      
  (dbo.Approval.DesigID = 3)
AND dbo.ApproveType.ApproveType = 'Approve'

UNION

--Pending
SELECT
  dbo.DocumentInfo.DocName as DocumentName,
  dbo.DocumentInfo.UploadedDate as UploadedDate , 
  dbo.DocumentInfo.Uploadfile as FileUploaded,   
  dbo.DocumentInfo.UploadedBy as  UploadedBy,
  dbo.Department.DepType as Department,
  Max(dbo.Approval.ApproveDate) AS ApproveDate,
  Max(dbo.Approval.AppoveBy) AS ApproveBy,
  dbo.ApproveType.ApproveType as Status
FROM         
  dbo.DocumentInfo
INNER JOIN
  dbo.Department ON dbo.DocumentInfo.DepID = dbo.Department.DepID 
INNER JOIN
  dbo.Approval ON dbo.DocumentInfo.DocID = dbo.Approval.DocID 
INNER JOIN
  dbo.ApproveType ON dbo.Approval.ApproveID = dbo.ApproveType.ApproveID 
GROUP BY 
  dbo.DocumentInfo.DocName as DocumentName,
  dbo.DocumentInfo.UploadedDate as UploadedDate, 
  dbo.DocumentInfo.Uploadfile as FileUploaded,   
  dbo.DocumentInfo.UploadedBy as  UploadedBy,
  dbo.Department.DepType as Department
WHERE      
  (dbo.Approval.DesigID = 3)
AND dbo.ApproveType.ApproveType = 'Pending'
AND dbo.DocumentInfo.DocID NOT IN
( 
  --omit the pending that have been approved
  SELECT
    dbo.DocumentInfo.DocID
  FROM         
    dbo.DocumentInfo
  INNER JOIN
    dbo.Department ON dbo.DocumentInfo.DepID = dbo.Department.DepID 
  INNER JOIN
    dbo.Approval ON dbo.DocumentInfo.DocID = dbo.Approval.DocID 
  INNER JOIN
    dbo.ApproveType ON dbo.Approval.ApproveID = dbo.ApproveType.ApproveID 
  GROUP BY 
    dbo.DocumentInfo.DocID as DocumentName,
    dbo.Department.DepType as Department
  WHERE      
    (dbo.Approval.DesigID = 3)
  AND dbo.ApproveType.ApproveType = 'Approved'
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-10-21
    • 2010-10-09
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多