我正在尝试使用另一个表中的总和更新表变量。由于表的设置方式,这需要一些JOINS,我似乎无法弄清楚加入的内容以及如何获得所需的结果集。
以下是我正在使用的表格:
CCR (variable declared as TABLE):
AttyID Name AttyState CCspent
PH:
number attorneyID
LL:
AccountID DebitAmt ItemDate
我已经填充了CCR中的AttyID,Name和AttyState,现在我需要更新CCspent。我必须得到LL.DebitAmt的SUM,其中LL.ItemDate在特定的日期范围内。
PH表没有AccountID,LL表没有AttorneyID。
我找到了Update table with SUM from another table,但没有任何联接,所以对我的情况没有多大帮助。
作为测试查询,我运行了以下内容:
SELECT SUM(LL.DebitAmt)
FROM Legal_Ledger LL
INNER JOIN payhistory PH
ON LL.AccountID = PH.number
WHERE LL.ItemDate BETWEEN '2014-07-01' AND '2014-07-31'
AND PH.AttorneyID = 6
它产生了律师6的预期结果,所以我知道逻辑有效。
然而,当我使用:
UPDATE @IA_CourtCostReport
SET CCspent =
COALESCE
(
(
SELECT SUM(LL.DebitAmt)
FROM Legal_Ledger AS LL
INNER JOIN master
ON LL.AccountID = master.number
INNER JOIN @IA_CourtCostReport CCR
ON master.attorneyID = CCR.AttyID
WHERE LL.ItemDate BETWEEN @StartDate and @EndDate
AND master.AttorneyID > 0
)
,0
) * -1
然后它会更新CCR中的所有行,其中包含日期范围内所有律师的所有费用总额。我需要律师的个人总数。
答案 0 :(得分:1)
将update
与join
:
UPDATE ccr
set ccspent = llph.sumdebitamt
FROM @IA_CourtCostReport ccr join
(SELECT PH.AttorneyID, SUM(LL.DebitAmt) as sumdebitamt
FROM Legal_Ledger LL INNER JOIN
payhistory PH
ON LL.AccountID = PH.number
WHERE LL.ItemDate BETWEEN '2014-07-01' AND '2014-07-31'
GROUP BY PH.AttorneyID
) llph
ON llph.AttorneyID = ccr.AttyId;
答案 1 :(得分:0)
您需要使用它来获得总和:
SELECT
master.attorneyID,
SUM(LL.DebitAmt)
FROM Legal_Ledger AS LL
INNER JOIN master
ON LL.AccountID = master.number
INNER JOIN @IA_CourtCostReport CCR
ON master.attorneyID = CCR.AttyID
WHERE LL.ItemDate BETWEEN @StartDate and @EndDate
AND master.AttorneyID > 0
GROUP BY master.AttorneyID
答案 2 :(得分:0)
您需要在用于设置总计的查询中引用要更新的表。
你应该能够改变
Update @IA_CourtCostReport
到
Update CCR
另外,为什么使用表变量? #temp表在大多数情况下都能提供卓越的性能。
答案 3 :(得分:0)
我理解这有点复杂......但如果你想要一个与特定律师相对应的总数,那么我建议你“按律师ID分组”。
UPDATE CourtCostReport set CCSpent=
select my_sum from(
select AttorneyID as id, sum(...) as my_sum from ... group by AttorneyID
)
where AttorneyID=id