ETLクエリでは従業員に関する情報が返され、サブクエリに由来する2つの集計カラム(ActualCount
およびExpectedCount
)が返されます。サブクエリ以外のサブクエリで日付をフィルタリングする方法
問題は、サブクエリが残っているテーブルが集約された情報とは独立して更新されていたことでした。だから私はクエリを段階的に実行していたときに、クエリはt1.ModifiedDateが更新されておらず、カウントレコードが更新されていても新しいカウントレコードを返しません。
インクリメンタルロードの目的の結果を返すこのクエリを書きましたが、私の問題は最初のロード中に各IDに対して複数の結果が返され、PK制約に違反することです。これはサブクエリに追加したt2.ModifiedDate
列のためです。サブクエリでフィルタリングする必要があります。
t2.ModifiedDateを取得し、重複を生成せずにメインのクエリに持ち出す方法はありますか?
望ましい結果(私はこの増分テストのための1つの結果を追加):
現在のクエリ:
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と(月、年)SubmissionDateの各組み合わせに対して複数の行を持つことができると仮定しています。その値でグループ化するのではなく、 'MAX(t2.ModifiedDate)AS ModifiedDate'を選択することで問題を修正できます。 –