我想写一个查询,将允许我在两个不同的连接中获得一列的总和,但这两个连接将有不同的条件。例如,我想从不同表中的记录中总结“matter_TotalBilled”,但我希望能够控制日期范围。所以下面我有这个查询:修复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
这里有两个连接。一个用于“2016-10-1”和“2017-7-26”(MattersThisYear)之间的“Matter”行,另一个用于“2015-10-1”和“2016-7- 26“(MattersLastYear)。
只要我只有“MattersThisYear”连接,但只要包括“MattersLastYear”连接,“SUM(MattersThisYear.matter_TotalBilled)”更改,即使这只是引用“MattersThisYear” “加入。
我的意图是,对于每个团队,我想在今年和去年返回事项matter_TotalBilled的总和。
我需要更改我的查询来解决此问题?
更新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
举个例子,在看一个名为“商业诉讼”,价值为球队“mattersThisYear”是“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 mattersLastYear”时,我会在特定团队中为“mattersThisYear”获得“130094”的值。当我运行您的查询时,该值变为“16261750”。为了确认,我预计它是“130094”而不是“16261750”。我不明白为什么第二次连接会改变这个值。 – Darren
@达伦最新输出? –
你的预期输出是什么? –