更新查询:Sum除以2个不同表中2个不同列之间的Count

时间:2014-06-02 18:13:18

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

我希望能够将一个表上的列中的财务数据(包含负值和正值)相加,并将其平均除以另一个表中的帐户总数。

我在嵌套我的SELECT语句时尝试了几种变体,但这不是问题,因为我继续收到消息&#34;聚合可能不会出现在UPDATE语句的集合列表中。&#34; < / p>

&#39;成本&#39;是一个空白列,只是为了插入值。它是十进制(18,2)类型。 金融&#39;和&#39;类型&#39;每个表都有一个用于加入数据的帐号#; &#39; Master&#39;表格中包含不相关的帐号,并且不会与财务和类型表共享任何统一数据。

UPDATE MasterTable
Set Cost =
(SELECT SUM(FinancialTable.Jan)
FROM FinancialTable
LEFT JOIN TypesTable
ON FinancialTable.Acct2 = TypesTable.Acct2)
WHERE (TypesTable.Type = 'overhead')
AND (FinancialTable.Unit = 123))

/

(SELECT COUNT(MasterTable.Acct1))

2 个答案:

答案 0 :(得分:1)

通过错误说明尝试声明变量并将其放入Set命令。看来您无法在Update语句中使用查询

 Declare @count as int
 Set @count = (Select COUNT(MasterTable.Acct1))

 Declare @sum as int 
 Set @sum = (SELECT SUM(FinancialTable.Jan)
        FROM FinancialTable
        LEFT JOIN TypesTable
        ON FinancialTable.Acct2 = TypesTable.Acct2
        WHERE (TypesTable.Type = 'overhead')
        AND (FinancialTable.Unit = 123))       

 Declare @cost as int
 Set @cost = @sum / @count

 Update MasterTable
 Set Cost = @cost

答案 1 :(得分:1)

问题中的代码存在两个问题。首先它有一个太多的结束括号。其次,

select count(MasterTable.Acct1)

本身并不是一个有效的查询。如果是,代码将没有语法问题。

如果要与更新语句聚合,则必须使用子查询并在其中进行聚合。所以你几乎就在那里。我还将左连接更改为内连接以提高可读性 - 因为它实际上是一个内连接,因为您在where子句中引用了TypesTable的一个字段。

所有这些都会导致我为你设置的 SQL-fiddle

最后 - 我不认为我制作的固定代码符合您的要求。 它为MasterTable中的每个字段设置Cost字段 - 这是您真正想做的事情吗?我怀疑你想加入它可能与Acct1领域?如果你能澄清你的问题,你可能会得到你真正想要的答案。