2つの異なる結合の列の合計を得ることができるクエリを作成しようとしていますが、これらの2つの結合の条件は異なります。たとえば、 "matter_TotalBilled"を別のテーブルのレコードから合計したいが、日付範囲を制御できるようにしたい。したがって、私はこのクエリを持っています:条件が異なる2つの左結合によるSQLの修正
SELECT
SUM(MattersThisYear.matter_TotalBilled) AS mattersThisYear,
SUM(MattersLastYear.matter_TotalBilled) AS mattersLastYear
FROM sys_Team
LEFT JOIN (
SELECT matter_TotalBilled, matter_TeamID, matter_DateOpened
FROM Company
LEFT JOIN ClientRelationship ON
ClientRelationship.clientrelationship_RelatedToItemID = Company.company_ID
AND ClientRelationship.clientrelationship_SOSRelFile = 'OR'
INNER JOIN Matter ON
Matter.matter_ClientID = ClientRelationship.clientrelationship_ClientID
GROUP BY matter_ID) AS MattersThisYear ON
MattersThisYear.matter_TeamID = sys_Team.team_ID
AND MattersThisYear.matter_DateOpened >= '2016-10-1'
AND MattersThisYear.matter_DateOpened <= '2017-7-26'
LEFT JOIN (
SELECT matter_TotalBilled, matter_TeamID, matter_DateOpened
FROM Company
LEFT JOIN ClientRelationship ON
ClientRelationship.clientrelationship_RelatedToItemID = Company.company_ID
AND ClientRelationship.clientrelationship_SOSRelFile = 'OR'
INNER JOIN Matter ON
Matter.matter_ClientID = ClientRelationship.clientrelationship_ClientID
GROUP BY matter_ID) AS MattersLastYear ON
MattersLastYear.matter_TeamID = sys_Team.team_ID
AND MattersLastYear.matter_DateOpened >= '2015-10-1'
AND MattersLastYear.matter_DateOpened <= '2016-7-26'
GROUP BY team_ID
ここに2つの結合があります。 1つは「2016-10-1」と「2017-7-26」(MattersThisYear)の間の「Matter」行で、もう1つは「2015-10-1」と「2016-7- 26 "(MattersLastYear)。
このクエリは、「MattersThisYear」結合のみを保持していますが、「MattersLastYear」結合を含めるとすぐに、「SUM(MattersThisYear.matter_TotalBilled)」が変更されますが、「MattersThisYear "参加する。
私の意図は、チームごとに、今年と昨年の問題について、matter_TotalBilledの合計を返すことです。
この問題を解決するには、クエリで何を変更する必要がありますか?
UPDATE 1:
SELECT team_Name,
SUM(MattersThisYear.mattersThisYear) AS mattersThisYear,
SUM(MattersLastYear.mattersLastYear) AS mattersLastYear
FROM sys_Team
LEFT JOIN
(
SELECT matter_TotalBilled as mattersThisYear,0 as mattersLastYear, matter_TeamID, matter_DateOpened -- made change at this line
FROM Company
LEFT JOIN ClientRelationship ON
ClientRelationship.clientrelationship_RelatedToItemID = Company.company_ID
AND ClientRelationship.clientrelationship_SOSRelFile = 'OR'
INNER JOIN Matter ON
Matter.matter_ClientID = ClientRelationship.clientrelationship_ClientID
GROUP BY matter_ID
) AS MattersThisYear ON MattersThisYear.matter_TeamID = sys_Team.team_ID
AND MattersThisYear.matter_DateOpened >= '2016-10-1'
AND MattersThisYear.matter_DateOpened <= '2017-7-26'
LEFT JOIN
(
SELECT 0 as mattersThisYear,matter_TotalBilled as mattersLastYear, matter_TeamID, matter_DateOpened -- made change at this line
FROM Company
LEFT JOIN ClientRelationship ON
ClientRelationship.clientrelationship_RelatedToItemID = Company.company_ID
AND ClientRelationship.clientrelationship_SOSRelFile = 'OR'
INNER JOIN Matter ON
Matter.matter_ClientID = ClientRelationship.clientrelationship_ClientID
GROUP BY matter_ID
) AS MattersLastYear ON MattersLastYear.matter_TeamID = sys_Team.team_ID
AND MattersLastYear.matter_DateOpened >= '2015-10-1'
AND MattersLastYear.matter_DateOpened <= '2016-7-26'
GROUP BY team_ID
例として、「商業訴訟」という名前のチームを見て、値:
これは、私は次のクエリを実行したときに私が手に出力され「今年のこと」は「16261750」です。
私はこのクエリを実行すると:
SELECT team_Name,
SUM(MattersThisYear.mattersThisYear) AS mattersThisYear
#SUM(MattersLastYear.mattersLastYear) AS mattersLastYear
FROM sys_Team
LEFT JOIN
(
SELECT matter_TotalBilled as mattersThisYear,0 as mattersLastYear, matter_TeamID, matter_DateOpened -- made change at this line
FROM Company
LEFT JOIN ClientRelationship ON
ClientRelationship.clientrelationship_RelatedToItemID = Company.company_ID
AND ClientRelationship.clientrelationship_SOSRelFile = 'OR'
INNER JOIN Matter ON
Matter.matter_ClientID = ClientRelationship.clientrelationship_ClientID
GROUP BY matter_ID
) AS MattersThisYear ON MattersThisYear.matter_TeamID = sys_Team.team_ID
AND MattersThisYear.matter_DateOpened >= '2016-10-1'
AND MattersThisYear.matter_DateOpened <= '2017-7-26'
#LEFT JOIN
#(
# SELECT 0 as mattersThisYear,matter_TotalBilled as mattersLastYear, matter_TeamID, matter_DateOpened -- made change at this line
# FROM Company
# LEFT JOIN ClientRelationship ON
# ClientRelationship.clientrelationship_RelatedToItemID = Company.company_ID
# AND ClientRelationship.clientrelationship_SOSRelFile = 'OR'
# INNER JOIN Matter ON
# Matter.matter_ClientID = ClientRelationship.clientrelationship_ClientID
# GROUP BY matter_ID
#) AS MattersLastYear ON MattersLastYear.matter_TeamID = sys_Team.team_ID
#AND MattersLastYear.matter_DateOpened >= '2015-10-1'
#AND MattersLastYear.matter_DateOpened <= '2016-7-26'
GROUP BY team_ID
この値は、その後「130094」である、私はそれがあることを期待するものになります。
残念ながら動作しません。 「MattersLastYear」の参加をコメントアウトし、「SUM(MattersLastYear.mattersLastYear)AS重要事項」とコメントすると、特定のチームの「mattersThisYear」の値が「130094」になります。クエリを実行すると、その値は「16261750」になります。確かに、私はそれが "16261750"ではなく "130094"になると期待しています。 2番目の結合がこの値を変更する理由はわかりません。 – Darren
@ダーレン出力は何ですか? –
あなたの期待する出力は? –