`

sql 按照日期月份统计

阅读更多
非常巧妙的SQL统计,作者(嘿嘿,不是我哦)Jarry


SQL统计,按月分组统计,有时候有些月份没有数据, =============================================
-- 功能:     年度个人社保缴费清单
-- 作者:     Jarry
-- 完成日期: 2008.3.13
-- =============================================
CREATE  PROCEDURE [dbo].[proc_bg_SecurityYearPersonReport]
(
@Year nvarchar(4),
@StaffID int
)
AS
BEGIN
SELECT
(CONVERT(varchar,mMonth)+'月') AS 'Month',
b.CompanyPension,b.PersonPension,b.CompanyMedical,
b.PersonMedical,b.Maternity,b.WorkInjury,b.Unemployment
FROM
(SELECT 1 AS 'mMonth'
  UNION SELECT 2 AS 'mMonth'
  UNION SELECT 3 AS 'mMonth'
  UNION SELECT 4 AS 'mMonth'
  UNION SELECT 5 AS 'mMonth'
  UNION SELECT 6 AS 'mMonth'
  UNION SELECT 7 AS 'mMonth'
  UNION SELECT 8 AS 'mMonth'
  UNION SELECT 9 AS 'mMonth'
  UNION SELECT 10 AS 'mMonth'
  UNION SELECT 11 AS 'mMonth'
  UNION SELECT 12 AS 'mMonth') m
LEFT JOIN
(
SELECT PayDate,sum(CompanyPension) CompanyPension,
sum(PersonPension) PersonPension,sum(CompanyMedical) CompanyMedical,
sum(PersonMedical) PersonMedical,sum(Maternity) Maternity,
sum(WorkInjury) WorkInjury,
sum(Unemployment) Unemployment FROM TB_Insurance
WHERE staID=@StaffID AND substring(cast(PayDate as nvarchar(6)),0,5)=@Year
GROUP BY PayDate
) b
on m.mMonth=convert(int,substring(convert(varchar,b.payDate),5,7))
END
GO
结果:

1月 NULL NULL NULL NULL NULL NULL NULL
2月 2345.00 236.00 2345.00 .00 .00 234.00 2345.00
3月 420.00 420.00 420.00 420.00 420.00 420.00 420.00
4月 NULL NULL NULL NULL NULL NULL NULL
5月 NULL NULL NULL NULL NULL NULL NULL
6月 NULL NULL NULL NULL NULL NULL NULL
7月 NULL NULL NULL NULL NULL NULL NULL
8月 .00 .00 .00 .00 .00 .00 .00
9月 NULL NULL NULL NULL NULL NULL NULL
10月 NULL NULL NULL NULL NULL NULL NULL
11月 NULL NULL NULL NULL NULL NULL NULL
12月 NULL NULL NULL NULL NULL NULL NULL


=================================================================================

-- =============================================
-- 功能:     年度社保费缴交人数及金额一览表
-- 作者:     Jarry
-- 完成日期: 2008.3.13
-- =============================================
CREATE  PROCEDURE [dbo].[proc_bg_SecurityYearCountReport]
(
@Year nvarchar(4)
)
AS
BEGIN
SELECT
(CONVERT(varchar,mMonth)+'月') AS 'Month',
b.Pension,b.PensionCount,b.Medical,
b.MedicalCount,b.Maternity,b.MaternityCount,
b.WorkInjury,b.WorkInjuryCount,b.Unemployment,b.UnemploymentCount
FROM
(SELECT 1 AS 'mMonth'
  UNION SELECT 2 AS 'mMonth'
  UNION SELECT 3 AS 'mMonth'
  UNION SELECT 4 AS 'mMonth'
  UNION SELECT 5 AS 'mMonth'
  UNION SELECT 6 AS 'mMonth'
  UNION SELECT 7 AS 'mMonth'
  UNION SELECT 8 AS 'mMonth'
  UNION SELECT 9 AS 'mMonth'
  UNION SELECT 10 AS 'mMonth'
  UNION SELECT 11 AS 'mMonth'
  UNION SELECT 12 AS 'mMonth') m
LEFT JOIN
(
SELECT PayDate,sum(CompanyPension)+sum(PersonPension) Pension,
sum(case when CompanyPension+PersonPension>0 then 1 else 0 end) PensionCount,
sum(CompanyMedical)+sum(PersonMedical) Medical,
sum(case when CompanyMedical+PersonMedical>0 then 1 else 0 end) MedicalCount,
sum(Maternity) Maternity,
sum(case when Maternity>0 then 1 else 0 end) MaternityCount,
sum(WorkInjury) WorkInjury,
sum(case when WorkInjury>0 then 1 else 0 end) WorkInjuryCount,
sum(Unemployment) Unemployment,
sum(case when Unemployment>0 then 1 else 0 end) UnemploymentCount
FROM TB_Insurance
where substring(cast(PayDate as nvarchar(6)),0,5)=@Year
GROUP BY PayDate
) b
on m.mMonth=convert(int,substring(convert(varchar,b.payDate),5,7))
END
GO
达到如下效果

月  份 养  老 工  伤 医  疗 失  业 生  育 
金  额 人 数 金 额 人 数 金 额 人 数 金 额 人 数 金 额 人 数
一月                    
二月                    
三月                      
四月                    
五月                    
六月                     
七月                    
八月                    
九月                    
十月                    
十一月                     
十二月                    

注:此处日期字段是int型:200808,200810
分享到:
评论

相关推荐

    SQL Server 查询两个日期之间的所有月份

    在SQL Server中,查询两个日期之间的所有月份是一个常见的需求,特别是在数据分析、报表生成或时间序列分析等场景。本文将详细讲解如何使用SQL Server实现这一功能,以满足上述标题和描述中的要求。 首先,我们需要...

    sql中的按日期统计问题

    例如,按月份统计订单数量: ```sql SELECT YEAR(date_column), MONTH(date_column), COUNT(*) FROM table GROUP BY YEAR(date_column), MONTH(date_column); ``` 这会返回每一年每个月的订单总数。 4. **...

    Oracle sql查询当前月的所有日期

    例如,有时我们需要获取当前月份的所有日期,这对于财务报表、数据统计等应用场景尤为重要。本文将详细解释如何通过Oracle SQL语句实现这一功能,并对其中涉及的关键概念和技术进行深入探讨。 ### Oracle SQL查询...

    sqlserver中对时间日期的操作

    这些函数对于日期的分析和比较非常有用,比如统计某个月份的数据总量。 ### 三、日期格式化 在.NET中,我们可以使用`DateTime.ToString()`方法结合不同的格式字符串来定制日期的显示格式,如`"f"`表示完整日期和...

    显示所在月份第一天及最后一天的日期的SQL语句

    用于显示每月第一天及最后一天的日期值,有利于进行日期数据信息的统计

    SQL语句 根据月份产生出勤人员月份日历报表

    一个SQL存储过程: 出勤资料查询 根据月份产生出勤人员月份日历报表 用到2个表:M_Users(用户表)、X_ITAttendance(用户出勤资料表),查询出的格式如桌面日历,日期不存在的以NULL值显示,存在的显示总的出勤时间...

    SQL语句范例-有关日期的函数

    虽然部分示例代码似乎是特定于Progress 4GL或类似编程环境的,但我们可以从中提炼出普遍适用的SQL日期函数原理和技巧。下面,我们将深入解析并解释这些函数的意义和应用场景。 ### 1. 获取年份的两位数字表示 函数...

    SQL语句技巧:按月统计数据

    在SQL中,对数据进行按月统计是一种常见的需求,特别是在数据分析和报告生成中。这个问题的描述涉及到了如何从一个包含日期和数量的表格中提取每月的总和。表的结构非常简单,有两个字段:`qty`(数量)和`date`...

    SQL联合统计查询

    例如,按月份统计每种产品的销售总额: ```sql SELECT MONTH(date_column), SUM(sales_amount) FROM table GROUP BY MONTH(date_column); ``` 六、实战应用 在报表统计中,可能需要结合多个表,使用JOIN操作来获取...

    SQLserver 实现分组统计查询(按月、小时分组)

    现在我们来探讨如何按照月份和小时进行分组统计: 1. **按月分组统计**: 当我们想根据年份和月份进行统计时,可以使用`CONVERT`函数和`DATEPART`函数。但这种方法会忽略没有记录的月份。为了解决这个问题,我们...

    sqlserver 计算当月所有自然周的区间。

    根据提供的文件信息,我们可以了解到这段代码的主要目的是在SQL Server中计算出指定月份的所有自然周的起始和结束日期,并将这些信息存储在一个名为`monthWeekBetween`的表中。接下来,我们将详细解释其中的关键概念...

    Sql Server中的日期与时间函数

    又如在报表中需要展示每个月的销售总额,可以使用 `DATEPART()` 函数提取出每个订单的月份,然后按月进行分组统计。 通过这些函数的应用,我们可以更加灵活地操作和分析日期相关的数据,从而提高工作效率并更好地...

    MS SQL Server获取十二个月份的英文缩写

    在上述提到的相关文章中,你可以找到更多关于SQL Server日期和时间处理的实用技巧和示例,包括获取日期的年月日部分、按月或小时分组统计、处理XML数据、连接到远程服务器、数据导入导出、备份和恢复,以及查询...

    SQL按照日、周、月、年统计数据的方法分享

    在SQL中,对数据进行日、周、月、年统计是一种常见的...总结来说,SQL提供了丰富的函数和语法来处理日期和时间,以便于我们对数据进行不同粒度的统计分析。理解并熟练运用这些函数,对于数据分析和报表生成至关重要。

    SQL 根据生日计算年龄

    - 接着检查截止日期的月份是否大于出生日期的月份: - 如果是,则年龄增加 `1`。 - 如果不是,则继续比较月份是否相同。 - 如果月份相同,则进一步比较日期部分: - 如果截止日期的日份大于等于出生日期的日份...

    工资发放日期关于payday的三个sql语句

    3. **条件查询**:在`payday1.sql`中,可能会包含`WHERE`子句,用于筛选满足特定条件的数据,例如找出所有在特定月份或特定年份发放工资的记录。 4. **聚合函数**:在`payday2.sql`中,可能使用了`COUNT()`, `SUM()...

    根据月份返回该月份的所在季度的经典SQL

    通过以上分析可以看出,给定的SQL公式是一种高效、简洁的方法,用于计算给定月份所在的季度。它不仅适用于SQL环境,在其他编程语言中也有广泛的应用前景。此外,此公式的优势在于其纯粹依赖于数学运算,避免了复杂的...

    SQL按月分组.txt

    - 在SQL查询语句中,`MONTH()`函数通常用来对日期或日期时间类型的字段进行操作,以获取其中的月份值。这对于按照不同的月份进行数据聚合非常有帮助。 #### 2. **CASE WHEN** 结构: - `CASE WHEN` 是一种条件...

Global site tag (gtag.js) - Google Analytics