2012-12-17 4 views
0

나는이 쿼리를 아래의 작업 벌금, 그리고 내가 원하는 것을 얻고있다. 내가 알아야 할 것은이 쿼리를 이처럼 작성하는 올바른 방법인가 아니면 단축 할 수있는 방법인가하는 것입니다.이 SQL Server 쿼리를 단축 할 수있는 방법이 있습니까?

4 개의 테이블이 있으며 1 차 분기 정보, 2 차 고객 정보, 3 차 엔지니어 정보, 4 차 서비스 정보가 있습니다. 서비스에서

테이블, 3 개의 다른 엔지니어의 이름 여기

내가 지난 3 개 라인에서 쿼리를 쿼리

SELECT 
    B.BranchName, C.Name AS CustomerName,D.FullName AS CallOpenedBy, 
    A.CallOpenTime, A.CallMode, A.CallType, A.ReportedBy, 
    A.ReportedVia, A.ReportedProblem, 
    A.MaterialsReceived, A.MisComments, A.CallPriority, A.EstimatedAmount, 
    E.FullName AS EngineerName, 
    A.ActionTaken, A.CallClosedTime, 
    F.FullName AS CallClosedBy, A.Status, 
    A.Amount 
FROM 
    TblServiceCalls A 
INNER JOIN 
    TblBranchInfo B ON A.BranchID = B.BranchID 
INNER JOIN 
    TblMainMaster C ON A.MasterID = C.MasterID 
INNER JOIN 
    TblUserProfiles D ON A.CallOpenedBy = D.UserProID 
INNER JOIN 
    TblUserProfiles E ON A.Engineer = E.UserProID 
INNER JOIN 
    TblUserProfiles F ON A.CallClosedBy = F.UserProID 

단축 할 수있다

3 열 경기를 호출? 미리 감사드립니다.

답변

3

아니요, 결과 세트에 D, EF을 사용하고 있으므로 이러한 테이블을 조인해야합니다. 결과에서 D.FullName AS CallOpenedByE.FullName AS
EngineerName
F.FullName AS CallClosedBy과 같은 항목을 삭제 한 경우에만 삭제할 수 있습니다.


보조 노트로

(그리고 난 당신이 질문을 원래의 이유를 내기),하지만 전화가 아직 폐쇄되지 않은 경우 A.CallClosedBy은 행이 제외됩니다 F.UserProID의 값에 할당되지 않은 결과에서.

링크하는 3 열 중 하나라도 대상 테이블에 해당 레코드가 없거나 null 일 수있는 경우 해당 세 테이블에 LEFT OUTER JOIN을 사용해야합니다. 여기

는 값이 NULL 또는 레코드가 출력 (Not Assigned) 대신 행을 제외하고 말을 할 대상 테이블에 존재하지 않는 경우 나는 지금 그것을

Select B.BranchName, C.Name AS CustomerName,IsNull(D.FullName, '(Not Assigned)') AS CallOpenedBy, 
A.CallOpenTime,A.CallMode, A.CallType,A.ReportedBy, A.ReportedVia, A.ReportedProblem, 
A.MaterialsReceived, A.MisComments,A.CallPriority,A.EstimatedAmount,IsNull(E.FullName, '(Not Assigned)') AS   
EngineerName, A.ActionTaken, A.CallClosedTime,IsNull(F.FullName, '(Not Assigned)') AS CallClosedBy, A.Status, 
A.Amount From TblServiceCalls A 
INNER JOIN TblBranchInfo B ON A.BranchID = B.BranchID 
INNER JOIN TblMainMaster C ON A.MasterID = C.MasterID 
LEFT OUTER JOIN TblUserProfiles D ON A.CallOpenedBy = D.UserProID 
LEFT OUTER JOIN TblUserProfiles E ON A.Engineer = E.UserProID 
LEFT OUTER JOIN TblUserProfiles F ON A.CallClosedBy = F.UserProID 

할 것 방법이다.

+0

감사합니다. 내기를 할 필요가 없습니다. 사실 전화가 닫히지 않으면 Havent는 그 부분을 고려했습니다. 그리고 좋은 설명에 대해 정말로 감사드립니다. 좋은 하루 되세요 –

관련 문제