내 ETL 쿼리는 직원에 대한 정보를 반환하고 하위 쿼리에서 오는 두 개의 집계 된 열 (ActualCount
및 ExpectedCount
)을가집니다.하위 쿼리에서 하위 쿼리의 날짜를 필터링하는 방법
내가 겪고있는 문제는 하위 쿼리가 남아있는 테이블이 집계 된 정보와 독립적으로 업데이트된다는 것입니다. 따라서 쿼리를 점진적으로 실행하면 쿼리에서 t1.ModifiedDate가 업데이트되지 않았고 카운트 레코드가 업데이트되었지만 새 카운트 레코드가 반환되지 않습니다.
증분로드에 대해 원하는 결과를 반환하는이 쿼리를 작성했지만 이제는 초기로드 중에 각 ID에 대해 여러 개의 결과가 반환되고 PK 제약 조건을 위반합니다. 이는 하위 필터링에서 추가 한 t2.ModifiedDate
열로 인해 필터링해야합니다.
t2.ModifiedDate를 가져와 중복을 생성하지 않고 기본 쿼리로 가져 오는 방법이 있습니까?
원하는 결과 (나는이 증가 테스트 한 결과 추가) :
현재 검색어 :
SELECT t1.EmployeeGoalID ,
t1.EmployeeID ,
t1.EmployeeMonthlyGoal ,
t1.TargetMonth ,
t1.TargetYear ,
Actuals.BranchID ,
Actuals.ActualCount ,
CASE WHEN Actuals.ActualCount IS NULL THEN 0
WHEN Actuals.ActualCount < t1.EmployeeMonthlyGoal
THEN Actuals.ActualCount
ELSE t1.EmployeeMonthlyGoal
END AS ExpectedCount ,
t1.CreateDate ,
t1.ModifiedDate ,
t1.Deleted
FROM dbo.EmployeeGoal t1
LEFT JOIN (SELECT COUNT(DISTINCT t2.InspectionSubmissionResultID) AS ActualCount ,
t2.BranchID ,
t3.EmployeeID ,
MONTH(DATEADD(hh, -5, t2.SubmissionDate)) AS ActualMonth ,
YEAR(DATEADD(hh, -5, t2.SubmissionDate)) AS ActualYear,
t2.ModifiedDate -- <<<<<This causes the problem
FROM InspectionSubmissionResult t2
INNER JOIN dbo.InspectionSubmissionEmployee t3 ON t3.InspectionSubmissionResultID = t2.InspectionSubmissionResultID
WHERE t3.InspectorType = 'INSP'
GROUP BY t2.BranchID ,
t3.EmployeeID ,
MONTH(DATEADD(hh, -5, t2.SubmissionDate)) ,
YEAR(DATEADD(hh, -5, t2.SubmissionDate)) ,
t2.ModifiedDate -- <<<<This causes the problem
) AS Actuals ON Actuals.EmployeeID = t1.EmployeeID
AND t1.TargetMonth = Actuals.ActualMonth
AND t1.TargetYear = Actuals.ActualYear
WHERE Actuals.ModifiedDate > '1/23/2017' OR t1.ModifiedDate > '1/23/2017'
-- I need this Actuals.ModifiedDate
http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-table-aliases-like-abc-or-t1-t2- t3.aspx –
실제 질문에 대해서는 많은 도움을 제공 할 수있는 좀 더 많은 정보가 필요합니다. 여기서 시작하는 것이 좋습니다. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ 귀하의 의견은 "이것은 문제가됩니다"입니다. 문제가 무엇입니까? –
'InspectionSubmissionResult' 테이블이 BranchID와 (SubDate, Month of Year) SubmissionDate의 각 조합에 대해 여러 행을 가질 수 있다고 가정합니다. 해당 값으로 그룹화하는 대신'MAX (t2.ModifiedDate) AS ModifiedDate'를 선택하여 문제를 수정할 수 있습니다. –