使用SQL Server中的聚合函数返回总和

时间:2017-12-17 00:03:34

标签: sql-server group-by aggregate-functions

我有两张桌子。

表1有以下数据

Id1  Name   Comments
--------------------
 1   abc     hgdhg
 2   xyz     mnoph  
 3   ysdfr   jkljk
 4   asdf    iiuoo
 5   pqrs    liuoo

表2有以下数据

Id2   Id1   count      date
-------------------------------
 1     1      18     11/16/2005
 2     1      1     11/15/2005
 3     1      4     11/25/2005
 4     2      4     11/22/2005
 5     3      8     11/05/2005
 6     3      3     11/30/2005
 7     4      2     11/29/2005
 8     3      0     11/04/2005
 9     2      5     11/02/2005
 10    3      9     11/22/2005
 11    2      15     11/10/2005
 12    5      12     11/19/2005

我希望将输出作为名称,评论,自2005年11月10日以来所有计数的总和返回

我正在尝试以下查询(条件为out out date)

select 
    Name, Comments, sum(count) 
from 
    Table1 T1 
join 
    Table2 T2 on T1.Id1 = T2.Id1 
group by 
    ID1  

但是它正在抛出错误

  

名称在选择列表中无效,因为它不包含在聚合函数或Group by子句中。

任何人都可以帮我查询(条件的日期)吗?这有什么问题?

提前致谢

3 个答案:

答案 0 :(得分:1)

没有聚合函数的select语句中的每一列都需要按句子分组以防止聚合错误,关于限制日期,使用where子句来定义条件,如前面的显示。

select 
    Name, Comments, sum(count) 
from 
    Table1 T1 
join 
    Table2 T2 on T1.Id1 = T2.Id1 
where  
    date >= '2005-11-10 00:00:00'
group by 
    Name, Comments

答案 1 :(得分:1)

您必须添加聚合函数中未包含的任何列,并使用where过滤结果:

select Name, 
      Comments, 
      sum(count) 
from Table1 T1 join Table2 T2 on T1.Id1 = T2.Id1 
where T2.[date] >= '11/10/2005'
group by Name, Comments

答案 2 :(得分:1)

您可以使用以下查询

SELECT  T1.Name ,
    T1.Comments ,
    SUM(T2.[count]) AS [count]
FROM    Table1 T1
    INNER JOIN Table2 T2 ON T1.Id1 = T2.Id1
WHERE   CAST(T2.[date] AS DATE) >= CAST('11/10/2005' AS DATE)
GROUP BY T1.Name ,
    T1.Comments