sql查询以查找所有行的总和和重复的计数

时间:2010-09-09 17:48:19

标签: sql duplicates sum

如果数据采用以下格式:

SID  TID  Tdatetime        QID   QTotal  
----------------------------------------
100  1    01/12/97 9:00AM  66    110   
100  1    01/12/97 9:00AM  66    110  
100  1    01/12/97 10:00AM 67    110  
100  2    01/19/97 9:00AM  66    .  
100  2    01/19/97 9:00AM  66    110  
100  2    01/19/97 10:00AM 66    110  
100  3    01/26/97 9:00AM  68    120  
100  3    01/26/97 9:00AM  68    120  
110  1    02/03/97 10:00AM 68    110  
110  3    02/12/97 9:00AM  64    115  
110  3    02/12/97 9:00AM  64    115  
120  1    04/05/97 9:00AM  66    105  
120  1    04/05/97 10:00AM 66    105  

我希望能够编写一个查询来汇总所有行的QTotal列,并找到Tdatetime列的重复行数。

输出结果如下:
 

  Year   Total  Count
97 | 1340 | 4
结果中的第三列不包括表中不同行的计数。输出按TDateTime列中的年份分组。

6 个答案:

答案 0 :(得分:1)

如果您真的想按tDateTime列进行分组,这将有效:

SELECT DISTINCT tDateTime, SUM(QTotal), Count(distinct tDateTime)
FROM Table
GROUP BY tDateTime
HAVING  Count(distinct tDateTime) > 1

但是您的结果看起来像是要在tDateTime列中按年份分组。这是对的吗?

若是,请尝试:

SELECT DISTINCT YEAR (tDateTime), SUM(QTotal), Count(distinct tDateTime)
FROM Table
GROUP BY YEAR (tDateTime)
HAVING  Count(distinct tDateTime) > 1

答案 1 :(得分:0)

您必须使用COUNT(此表中的subSELECT,WHERE QTotal是相同的)从此表中使用QTotal进行GROUPing。如果我只有时间,我会给你写SQL语句,但这需要几分钟。

答案 2 :(得分:0)

类似的东西:

select Year(Tdatetime)  ,sum(QTotal), count(1) from table group by year(Tdatetime )

或完整日期

select Tdatetime  ,sum(QTotal), count(1) from table group by year(Tdatetime) 

或者你丑陋的语法(:))

select 'Year ' + cast(Year(tdatetime) as varchar(4)) 
     + '|' + cast(sum(QTotal) as varchar(31)) 
     + '|' + cast(count(1) as varchar(31)) 
 from table group by year(Tdatetime )

或者你想要一年吗?汇总所有列?或者只是一年?

答案 3 :(得分:0)

以下查询可能有所帮助:

SELECT 
    'YEAR ' + CAST(sub.theYear AS VARCHAR(4)), 
    COUNT(sub.C), 
    (SELECT SUM(QTotal) FROM MyTable WHERE YEAR(Tdatetime) = sub.theYear) AS total
FROM 
   (SELECT 
        YEAR(Tdatetime) AS theYear, 
        COUNT(Tdatetime) AS C 
    FROM MyTable 
    GROUP BY Tdatetime, YEAR(Tdatetime)
    HAVING COUNT(Tdatetime) >= 2) AS sub

答案 4 :(得分:0)

SELECT
 YEar + year(Tdatetime),
 SUM ( QTotal ),
 (SELECT COUNT(*) FROM ( 
 SELECT Tdatetime FROM tDateTime GROUP BY Tdatetime        
 HAVING COUNT(QID) > 1) C
FROM
 Tdatetime t

GROUP BY 
 YEar + year(Tdatetime)

答案 5 :(得分:0)

这是我第一次在stackoverflow上提出问题。看起来我丢失了原始的ID信息。我必须注册登录并为我发布的问题添加评论。

要回答OMG Ponies问题,这是一个SQL Server 2008数据库。 @Abe Miessler,SID 120的行不包含重复项。 SID 120的第一行显示日期时间列中的上午9:00,第二行显示上午10:00。

@Zafer,您的查询是接受的答案。我做了一些小调整才能让它发挥作用。谢谢。 感谢Abe Miessler和其他人的帮助。