次の表のように、テーブルCsOrganizationに階層的にデータが格納されたテーブルがあります。SQL Server - 異なるテーブルからのCTE再帰的SUM値
Table Name : CsOrganization
OrgId OrgParentId OrgName
1 NULL X COMPANY
2 1 Administrator
3 2 Adm 1
4 2 Adm 2
5 3 Adm 1_1
し、次の表のようにCsOrganizationテーブルに関連EmHisOrganizationという名前のテーブルがあります。
Table Name : EmHisOrganization
EmpId OrgId
1 2
2 2
3 3
4 4
5 5
各従業員は、彼らが持っている組織に基づいて残業データを持つことになります、そして、彼らはEmOvertimeテーブルに格納されています。
Table Name : EmOvertime
EmpId TotalOtReal
1 1.00
2 2.00
3 3.00
4 2.00
5 1.00
問題は、私は、各組織に基づいてTotalHoursの合計を取得する必要があります。 TotalHoursの合計は、その子のTotalHoursデータもすべて合計する必要があります。これまでのところ、私は親子を理解することができましたが、別のテーブルからTotalHoursデータを取得して合計する方法はわかりません。私が知る限り、これらのテーブルに参加してTotalHoursを取得する必要がありますが、残念ながらCTE Recursiveでは構文でOUTER JOINを使用できません。 Adm 1のTotalHoursが値を持っているTotalHours列とID 5と従業員では3.00の値を持つID 3との和従業員からである
Desired Output
OrgId OrgName TotalHours
1 X COMPANY 9.00
2 Administrator 9.00
3 Adm 1 4.00
4 Adm 2 2.00
5 Adm 1_1 1.00
注意:ここで私は上記の例に基づいてほしい出力ですTotalHours列の1.00になり、目的の表の4.00になりました。 ID 1と2のOrgIdがTotalHoursで9.00の値を得たときも同じことが起こります。
ご協力いただければ幸いです。
2016年9月5日で編集、12.02は、テーブルやクエリの私の試みの関係を追加しました。
ここでは、関係の外観はTable Relationshipです。あなたはNestetについて考えることは摂餌を設定します
With OrgTree (OrgId, OrgName, TotalHours) AS
(
SELECT orgId, orgN, SUM(eReal) AS TotalHours
FROM (SELECT OrgId AS orgId, OrgName AS orgN, CASE WHEN x.TotalOtReal IS NULL THEN 0 ELSE x.TotalOtReal END AS eReal
FROM (SELECT f.OrgId, f.OrgName, o.TotalOtReal
FROM dbo.CsOrganization AS f LEFT OUTER JOIN
(SELECT OrgId, SUM(TotalOtReal) AS TotalOtReal
FROM (SELECT a.EmpId, a.OrgId, b.TotalOtReal
FROM dbo.EmHisOrganization AS a LEFT OUTER JOIN
(SELECT EmpId, SUM(TotalOtReal) AS TotalOtReal
FROM dbo.EmOvertime AS a
GROUP BY EmpId) AS b ON a.EmpId = b.EmpId) AS a_1
GROUP BY OrgId) AS o ON f.OrgId = o.OrgId
) AS x WHERE OrgId = 1) AS xx
GROUP BY orgId, orgN
UNION ALL
SELECT a.OrgId, a.OrgName, TotalHours FROM dbo.CsOrganization a
INNER JOIN OrgTree o ON a.OrgParentId = o.OrgId
)
SELECT a.OrgId, a.OrgName, SUM(a.TotalHours) AS TotalHours FROM OrgTree a
GROUP BY a.OrgId, a.OrgName
関連するRDBMSのタグ、および問題を解決するのも、あなたの試みを含むようにあなたの質問を編集してください。 –
私は上記の質問を編集しました。どうぞご覧ください。 – Reynaldi
でも、あなたが作業しているデータベースはまだわかりません。 cteは多くのプラットフォームでサポートされています。それはSQLサーバー、オラクル、ポストグル、何か他のですか? –