SQL语法获得总和的问题

时间:2011-10-11 15:31:15

标签: sql sql-server sql-server-2005 syntax

好的我有两张桌子。

表IDAssoc包含bill_idyeararea_id列。

表格标题包含bill_idyearmain_idamount_due列。

我正在尝试从ID表中获取IDAssoc表中每个相关area_ids的amount_due列的总和。

我正在做一个select语句来选择总和并加入bill_ids。如何进行设置,以便从assoc表中的每个area_id中为每个关联的帐单创建一行。可能有三个或四个bill_ids与每个area_id相关联,我需要为每个都加上这些并返回,所以我可以在另一个语句中使用此选择。我为area_id设置了一个组,但它仍然返回每一行而不是为每个area_id汇总它们。我已经在where子句中指定了year和main_id来返回我想要的数据,但是我无法使总和正常工作。对不起,我还在学习,我不知道该怎么做。谢谢!

编辑 - 基本上我到目前为止所尝试的查询基本上就像下面发布的那样:

select a.area_id, sum(b.amount_due)
from IDAssoc a
inner join Bill b
on a.bill_id = b.bill_id
where Bill.year = 2006 and bill.bill_id = 11111

这些只是任意数字。 返回的数据如下: amount_due - area_id .05 1003 .15 1003 .11 1003 65 1004 55 1004

我需要为每个area_id返回一行,并将amount_due求和。 area_id只在assoc表中,而不在bill表中。

2 个答案:

答案 0 :(得分:2)

select a.area_id, sum(b.amount_due)
from IDAssoc a
inner join Bill b
on a.bill_id = b.bill_id
where b.year = 2006 and b.bill_id = 11111
group by a.area_id

如果一个inner join可以有很多或没有left join,您可能希望将IDAssoc更改为Bill

select a.area_id, coalesce(sum(b.amount_due),0)
from IDAssoc a
left join Bill b
on a.bill_id = b.bill_id
where b.year = 2006 and b.bill_id = 11111
group by a.area_id

答案 1 :(得分:1)

您缺少GROUP BY子句:

SELECT a.area_id, SUM(b.amount_due) TotalAmount
FROM IDAssoc a
LEFT JOIN Bill b
ON a.bill_id = b.bill_id
GROUP BY a.area_id