2013-12-25 3 views
1

У меня есть сценарий, когда при первом загрузке документа каждый пользователь сначала должен получить одобрение, а затем, когда надзорный орган одобрит/отклонит документы, тогда только одобрить документы, перейдите к менеджеру, а затем снова, когда менеджер одобрит/отклонит документ только тогда утвердить документ показывает директору для окончательного утвержденияменеджер шоу одобряет документы Процедура магазина tHRough

ALTER PROCEDURE [dbo].[ALLDOCUMNETS] 
AS 
begin 
SELECT DocumentInfo.DocID as DocumentID, 
dbo.DocumentInfo.DocName as DocumentName, 
dbo.DocumentInfo.Uploadfile as FileUploaded, 
dbo.DocumentInfo.UploadedBy as UploadedBy, 
dbo.Userss.Email as UserEmail, 
dbo.DocType.DocType as Document, 
dbo.Department.DepType as Department , 
dbo.Approval.AppoveBy, 

dbo.ApproveType.ApproveType as Status 

FROM dbo.Department 
left JOIN dbo.DocumentInfo 
ON dbo.DocumentInfo.DepID=dbo.Department.DepID 

left JOIN dbo.DocType 
    ON dbo.DocumentInfo.DocTypeID=dbo.DocType.DocTypeID 
inner JOIN dbo.Userss on Userss.UserName =dbo.DocumentInfo.UploadedBy 

    inner join dbo.Approval ON dbo.DocumentInfo.DocID = dbo.Approval.DocID INNER JOIN 
    dbo.ApproveType ON dbo.Approval.ApproveID = dbo.ApproveType.ApproveID 
    AND dbo.ApproveType.ApproveType = 'Approve' 
    left join Designation on dbo.Userss.DesigID=dbo.Designation.DesigID 

WHERE designation.DesigType = 'Manager' 

конец

видеть это изображение record in table

здесь выше запись изображения kanez является менеджером и sundus является супервизором

здесь я хочу показать только kanez утвердить документы показать директору, тогда он сможет окончательное одобрение, но здесь как документы руководителя, так и менеджера идут к директору, но я хочу показать только kanez документ утверждает документы директору?

ТАБЛИЦЫ tables стол Просмотров

, как я это сделал?

обозначение таблицы это мое назначение таблицы

DesignID DesigType 
1  SuperVisor 
2  Manager 
3  Director 
    4  BasicUsers 

и это мой стол утверждение

SeqNo DocID ApproveID AppoveBy ApproveDate 
258 30  1   sundus 2013-12-25 18:33:36.373 
259 30 1   kaneez 2013-12-25 18:34:47.347 

теперь, пожалуйста, скажите мне, что я могу сделать

+0

Не ответ, а просто POINTER ,,,,,,. Вы делаете 'LEFT JOIN' 1, а затем' INNER JOIN' означает, что все несоответствующие записи будут отфильтрованы с помощью этого INNER JOIN вам нужно изменить порядок соединений, сделать все INNER JOINS 1st, а затем влево или вправо. –

+0

ОК .... но как я показываю документы директору, который одобряет только менеджер ... а затем еще один директор для одобрения – user3134694

+0

Почему оба SQL Server и MySql помечены здесь? – RBarryYoung

ответ

0

Добавить в запрос:

inner JOIN dbo.Userss on Userss.UserName =dbo.DocumentInfo.UploadedBy 
         AND UserTypeId = manger 
+0

менеджер в таблице обозначений и имени столбца desginationtype – user3134694

0

Теперь, поскольку я не знаю точной схемы всех ваших таблиц, я только предполагаю, что у вашего Users table есть поле для DesignID, я создал переменную @ApprovedBy в вашей процедуре, теперь, если вы хотите получить все утвержденные документы от определенного уровня людей все, что вам нужно сделать, это передать Designation в качестве параметра вашей процедуры, и он вытащит все документы, одобренные этим уровнем сотрудников.

Также проверьте правильность написания таблицы пользователей, так как вы использовали пользователей с двойным не уверены, действительно ли это так, или вы ошиблись.

ALTER PROCEDURE [dbo].[ALLDOCUMNETS] 
@ApprovedBy VARCHAR(50) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    SELECT 
      DocumentInfo.DocID as DocumentID, 
      dbo.DocumentInfo.DocName as DocumentName, 
      dbo.DocumentInfo.Uploadfile as FileUploaded, 
      dbo.DocumentInfo.UploadedBy as UploadedBy, 
      dbo.Userss.Email as UserEmail, 
      dbo.DocType.DocType as Document, 
      dbo.Department.DepType as Department , 
      dbo.Approval.AppoveBy, 
      dbo.ApproveType.ApproveType as Status 

    FROM dbo.Department INNER JOIN dbo.DocumentInfo 
    ON dbo.DocumentInfo.DepID = dbo.Department.DepID 
    INNER JOIN dbo.DocType 
    ON dbo.DocumentInfo.DocTypeID = dbo.DocType.DocTypeID 
    INNER JOIN dbo.Userss 
    ON Userss.UserName =dbo.DocumentInfo.UploadedBy 
    INNER JOIN dbo.Approval 
    ON dbo.DocumentInfo.DocID = dbo.Approval.DocID 
    INNER JOIN dbo.ApproveType 
    ON dbo.Approval.ApproveID = dbo.ApproveType.ApproveID 
    LEFT JOIN Designation 
    ON dbo.Userss.DesigID=dbo.Designation.DesigID 
    WHERE designation.DesigType = 'Manager' 
    AND dbo.ApproveType.ApproveType = 'Approve' 
    AND dbo.Approval.AppoveBy IN (SELECT UserName 
            FROM Userss.UserName INNER JOIN designation 
            ON Userss.DesignID = designation.DesignID 
            WHERE designation.DesigType = @ApprovedBy) 
END 

Вызов Proc

, чтобы получить все документы, утвержденные менеджером просто сделать что-то вроде ...

EXECUTE dbo.ALLDOCUMNETS @ApprovedBy = 'Manager' 

, чтобы получить все документы, утвержденные Супервизор просто делать что-то вроде ...

EXECUTE dbo.ALLDOCUMNETS @ApprovedBy = 'Supervisor' 

a d so on .....

+0

, пожалуйста, см. Мой вопрос с обновлением, когда я пробую это, он не может вернуть мне ни одну строку – user3134694

+0

, принесите этот 'dbo.ApproveType .ApproveType = 'Утвердить' в вашем предложении where. вы фактически не присоединяетесь к своей таблице в этом поле. поэтому oyu нужно вытащить его из предложения ON на вашем соединении. –

+0

ОК теперь я пробовал это .. ЗАГРУЗИТЬ designation.DesigType = 'Manager' AND dbo.ApproveType.ApproveType = 'Approve' , но он всегда не возвращает никакой записи – user3134694

Смежные вопросы