我希望能够将一个表上的列中的财务数据(包含负值和正值)相加,并将其平均除以另一个表中的帐户总数。
我在嵌套我的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))
答案 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领域?如果你能澄清你的问题,你可能会得到你真正想要的答案。