如果数据采用以下格式:
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列中的年份分组。
答案 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和其他人的帮助。