以月份分隔的SQL总和和计数

以月份分隔的SQL总和和计数,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我正在编写一个脚本,该脚本查询一个表,对状态为10的所有行进行计数,并按月分离总计数。有些事 考虑到我的成绩有两个12月,这是不对的 在11月,其中只有一个日期,这意味着两行的状态为10,并且在同一日期(11-04)下。12月在同一日期(12-04)有252行,12-05日期有1行 如何按月份查询和分离计数和日期 非常感谢您的帮助 SELECT CONVERT(CHAR(3), Datename(month, datecomplete)) AS Month, Count(*)

我正在编写一个脚本,该脚本查询一个表,对状态为10的所有行进行计数,并按月分离总计数。有些事 考虑到我的成绩有两个12月,这是不对的

在11月,其中只有一个日期,这意味着两行的状态为10,并且在同一日期(11-04)下。12月在同一日期(12-04)有252行,12-05日期有1行

如何按月份查询和分离计数和日期

非常感谢您的帮助

SELECT CONVERT(CHAR(3), Datename(month, datecomplete)) AS Month, 
       Count(*)                                        AS Val 
FROM   nwds 
WHERE  status = 10 
GROUP  BY Datediff(month, 0, datecomplete), 
          datecomplete 
我的结果

Nov 2
Dec 252
Dec 1
预期结果

Nov 2
Dec 253

datecomplete
应被排除在
groupby
之外,否则结果将按天分组。分组需要在datecomplete列的
部分

SELECT 
CONVERT(CHAR(3), Datename(month, datecomplete)) AS Month, 
count(*)  AS Val 
FROM   nwds 
WHERE  status = 10 
GROUP  BY CONVERT(CHAR(3), Datename(month, datecomplete)) ,
datepart(yyyy, datecomplete)

datecomplete
应被排除在
groupby
之外,否则结果将按天分组。分组需要在datecomplete列的
部分

SELECT 
CONVERT(CHAR(3), Datename(month, datecomplete)) AS Month, 
count(*)  AS Val 
FROM   nwds 
WHERE  status = 10 
GROUP  BY CONVERT(CHAR(3), Datename(month, datecomplete)) ,
datepart(yyyy, datecomplete)
如果您曾经获得过不同年份的数据,您可以通过将年份添加到
组中

SELECT LEFT(DATENAME(M, datecomplete), 3) AS Month, 
       YEAR(datecomplete)                 AS Year,
       Count(*)                           AS Val 
FROM   nwds 
WHERE  status = 10 
GROUP  BY LEFT(DATENAME(M, datecomplete), 3), YEAR(datecomplete)
如果您曾经获得过不同年份的数据,您可以通过
将年份添加到
组中

SELECT LEFT(DATENAME(M, datecomplete), 3) AS Month, 
       YEAR(datecomplete)                 AS Year,
       Count(*)                           AS Val 
FROM   nwds 
WHERE  status = 10 
GROUP  BY LEFT(DATENAME(M, datecomplete), 3), YEAR(datecomplete)
试试这个

select CONVERT(char(3),DATENAME(MONTH,datecomplete)) as [month],
       count(*)                                      as val
from nwds
WHERE  status = 10 
group by CONVERT(char(3),DATENAME(MONTH,datecomplete))
试试这个

select CONVERT(char(3),DATENAME(MONTH,datecomplete)) as [month],
       count(*)                                      as val
from nwds
WHERE  status = 10 
group by CONVERT(char(3),DATENAME(MONTH,datecomplete))