Sql 统计一年中每个月的记录

Sql 统计一年中每个月的记录,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个表,其中总共有1000条记录。它的结构如下: EMP_ID EMP_NAME PHONE_NO ARR_DATE 1 A 545454 2012/03/12 我想计算2012年每个月的记录数 有什么方法可以一次性解决我的问题吗 我试过: select count(*) from table_emp where year(ARR_DATE) = '2012' and month(ARR_DATE) = '01' 请尝试以下查询: SELECT

我有一个表,其中总共有1000条记录。它的结构如下:

EMP_ID EMP_NAME PHONE_NO   ARR_DATE
1        A        545454 2012/03/12
我想计算2012年每个月的记录数

有什么方法可以一次性解决我的问题吗

我试过:

select count(*) 
from table_emp 
where year(ARR_DATE) = '2012' and month(ARR_DATE) = '01'
请尝试以下查询:

SELECT 
  SUM(CASE datepart(month,ARR_DATE) WHEN 1 THEN 1 ELSE 0 END) AS 'January',
  SUM(CASE datepart(month,ARR_DATE) WHEN 2 THEN 1 ELSE 0 END) AS 'February',
  SUM(CASE datepart(month,ARR_DATE) WHEN 3 THEN 1 ELSE 0 END) AS 'March',
  SUM(CASE datepart(month,ARR_DATE) WHEN 4 THEN 1 ELSE 0 END) AS 'April',
  SUM(CASE datepart(month,ARR_DATE) WHEN 5 THEN 1 ELSE 0 END) AS 'May',
  SUM(CASE datepart(month,ARR_DATE) WHEN 6 THEN 1 ELSE 0 END) AS 'June',
  SUM(CASE datepart(month,ARR_DATE) WHEN 7 THEN 1 ELSE 0 END) AS 'July',
  SUM(CASE datepart(month,ARR_DATE) WHEN 8 THEN 1 ELSE 0 END) AS 'August',
  SUM(CASE datepart(month,ARR_DATE) WHEN 9 THEN 1 ELSE 0 END) AS 'September',
  SUM(CASE datepart(month,ARR_DATE) WHEN 10 THEN 1 ELSE 0 END) AS 'October',
  SUM(CASE datepart(month,ARR_DATE) WHEN 11 THEN 1 ELSE 0 END) AS 'November',
  SUM(CASE datepart(month,ARR_DATE) WHEN 12 THEN 1 ELSE 0 END) AS 'December',
  SUM(CASE datepart(year,ARR_DATE) WHEN 2012 THEN 1 ELSE 0 END) AS 'TOTAL'
FROM
    sometable
WHERE
  ARR_DATE BETWEEN '2012/01/01' AND '2012/12/31' 

这将为您提供2012年每月的计数

SELECT MONTH(ARR_DATE) MONTH, COUNT(*) COUNT
FROM table_emp
WHERE YEAR(arr_date)=2012
GROUP BY MONTH(ARR_DATE);


演示。

似乎没有问题?请参见。。。。。我想从顶部开始(第二行)提问。顺便说一句,函数中的换行会使查询无法组织。如果您能花一些时间清楚地陈述您的问题,然后正确地格式化以使其可读,这将非常有用。在这种情况下,我想你是在问如何根据ARR_DATE列计算一年中每个月的记录数,但这只是一个猜测。如果正确,请检查GROUP BY、COUNT()、YEAR()和MOUNT()的文档。您的查询和我的查询输出是相同的。我想知道一种方法,以便我可以按月获取数据+1用于避免不可组织谓词,但应使用明确的日期格式,并且OP应避免
介于
之间,如果
datetime
数据类型(如果
date
datatype,则为OK),假定它是日期类型,因为没有“时间”在示例数据中,它将显示从1月到12月的记录总数…是否为月?@manojkumarsingh-它应按月正确分隔这些值。我更喜欢约阿希姆的问题,因为它比较短。但是这两种查询都是有效的,并且应该产生相同的计数,只是一行一列。@Leigh Joachim和mine查询之间的一个小区别是,在非常大的表上,挖掘速度非常快,因为它不使用GROUP BY;)我更喜欢这个,因为它给出了月份号,所以我可以用月份名代替月份号吗?例如
Jan
Feb
使用
选择MONTHNAME(ARR_DATE)MONTH
获取“一月”、“二月”等。月号很有用。此代码不起作用,因为如果给定月份没有记录,它将不会显示。为什么在2012年左右引用
YEAR()
返回一个数字。@iDevlop我刚刚测试过它(
Microsoft SQL Server 2012-11.0.5058.0(X64)
),它可以使用引号和不使用引号。**例如:-四月没有任何员工注册。**所以这个月有0个计数。该记录如何添加到最终结果中。@janaka该记录将不会出现在结果中,如果您要问如何强制该记录包含April,0,我认为您应该将其作为一个新的问题来提问one@Dan嗨,丹,您能告诉我,如果我必须查找两年之间的记录,那么我必须分别显示2019年1月至2020年12月每个月的计数吗
SELECT MONTH(ARR_DATE) MONTH, COUNT(*) COUNT
FROM table_emp
WHERE YEAR(arr_date)=2012
GROUP BY MONTH(ARR_DATE);
SELECT    COUNT(*) 
FROM      table_emp 
WHERE     YEAR(ARR_DATE) = '2012' 
GROUP BY  MONTH(ARR_DATE)