用另一个用SUM更新一个表

时间:2014-08-04 21:17:23

标签: sql sql-server sql-server-2008

我正在尝试使用另一个表中的总和更新表变量。由于表的设置方式,这需要一些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中的所有行,其中包含日期范围内所有律师的所有费用总额。我需要律师的个人总数。

4 个答案:

答案 0 :(得分:1)

updatejoin

一起使用
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