一个统计报表sql问题

今天朋友问我了一个统计报表的sql问题。我弄了好久。终于算是写出来了。这里记录下。

问题:

id--------------name--------------addtime
1                       a                      2014-01-01 02:30:21
1                       b                      2014-01-03 03:20:02
1                       c                      2014-01-03 06:10:30
1                       d                      2014-01-06 11:30:15
1                       e                      2014-01-06 11:10:18
1                       f                       2014-01-06 12:30:19
想要达到查询结果:
addtime---------------count
2014-01-01                  1
2014-01-02                  0
2014-01-03                  2
2014-01-04                  0
2014-01-05                  0
2014-01-06                  3

主要难点是:2014.1.2 这天没有数据,怎么按照这种日期排序呢?

最终的思路是:先生成日期的临时表,再根据日期的临时表进行排序。

我根据朋友的需求,创建的表:

表数据:

代码:

--删除临时表
DROP TABLE #tempDate
--创建临时表
CREATE TABLE #tempDate(CreateTime DATETIME)
--设置起始时间
DECLARE @startTime DATETIME
DECLARE @endTime DATETIME
SET @startTime=‘2015-3-10‘
SET @endTime=‘2015-4-28‘
--生成日期数据
WHILE @startTime<@endTime
BEGIN
    INSERT INTO #tempDate
            ( CreateTime )
    VALUES  ( CAST(DATEPART(yy,@startTime) AS NVARCHAR(13))+‘-‘+
    CAST(DATEPART(mm,@startTime) AS NVARCHAR(13))+‘-‘+
    CAST(DATEPART(dd,@startTime) AS NVARCHAR(13))  -- CreateTime - datetime
              )
    SET @startTime=DATEADD(dd,1,@startTime)
    CONTINUE
END

--查询统计结果
SELECT #tempDate.CreateTime,COUNT(b.CreateTime) SumCount  FROM #tempDate LEFT JOIN
TestTable1
b
ON (CAST(DATEPART(yy,#tempDate.CreateTime) AS NVARCHAR(13))+‘-‘+
    CAST(DATEPART(mm,#tempDate.CreateTime) AS NVARCHAR(13))+‘-‘+
    CAST(DATEPART(dd,#tempDate.CreateTime) AS NVARCHAR(13))) = (CAST(DATEPART(yy,b.CreateTime) AS NVARCHAR(13))+‘-‘+
    CAST(DATEPART(mm,b.CreateTime) AS NVARCHAR(13))+‘-‘+
    CAST(DATEPART(dd,b.CreateTime) AS NVARCHAR(13)))
时间: 2024-08-30 03:26:39

一个统计报表sql问题的相关文章

基于Android MPAndroidChart实现腾讯QQ群数据统计报表核心功能

 基于Android MPAndroidChart实现腾讯QQ群数据统计报表核心功能 腾讯QQ移动客户端(新版)的QQ群有一项功能比较有趣,是关于QQ群的.QQ群新增一项功能开放给具有管理权限的群成员:管理群 -> 群数据 中,会看到QQ群的一些基础数据统计报表,如人数.发言条数的统计报表,如图: 我之前写了一篇文章是关于Android平台上的一个统计报表的开源框架MPAndroidChart,文章介绍了如何在自己的项目中使用MPAndroidChart制作统计报表,同时给出了基本折线图的一

一个统计以往数据的SQL。

今天有一位朋友发了这么个场景:一个商店的收入记录表,每天都有记录: 日期 每天收入 07/11 100 07/12 102 07/13 103 07/14 101 现在做一个统计,用户希望看到自已的收入统计 日期 每天收入 07/11 100 07/12 202 07/13 305 07/14 406 CREATE TABLE IF NOT EXISTS `income` ( `id` int(11) NOT NULL, `idate` date DEFAULT NULL, `money` in

用SQL实现统计报表中的“小计”和“合计”

问题: 开发一个关于各烟叶等级的二次验级的原发件数.原发重量及验收重量的统计报表.其中,原发件数.原发重量和验收重量等列要求计算出各等级组别的小计和所有记录的合计. 语句: SELECT DECODE(GROUPING(T4.TOBACCO_CLASS_TYPE) + GROUPING(T1.TOBACCO_CLASS_NAME), 1, DECODE(T4.TOBACCO_TYPE, 51, ‘上等烟小计’, 52, ‘中等烟小计’, 53, ‘下等烟小计’, 54, ‘低等烟小计’, ‘小计

非常规统计报表之制作按段分组报表的新办法

报表开发中,经常会碰到一些需要进行非常规统计的报表,固定分组.可重复分组.组内排序,还包括跨行组计算的报表,甚至有些报表本身无数据来源.以及需要对数据源再计算.这些报表本身具备一定的特殊性,使用常规方法往往难于实现. 对于按段分组报表,各段之间可以有重复,也就可能出现按段可重复的分组报表.集算报表在完成这类特殊统计报表时比较简单,这里通过一个实例说明实现过程. 报表说明 根据员工基本信息表按年龄统计各年龄段区间的人数.奖金等汇总情况.报表样式如下: 这里"30-40岁"和"3

ASP.NET MVC搭建项目后台UI框架—7、统计报表

ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET MVC搭建项目后台UI框架—4.tab多页签支持 ASP.NET MVC搭建项目后台UI框架—5.Demo演示Controller和View的交互 ASP.NET MVC搭建项目后台UI框架—6.客户管理(添加.修改.查询.分页) ASP.NET MVC搭建项目后台UI框架—7.统计报表 本节,我将通

统计报表

http://baike.baidu.com/link?url=6jkLcXT5-SmovTo9o2T2fGr0J_Ec18q45L19_GDvPKQl2_GG1TWky0nABJMd-GQ7c5GcRYvuy56NdN-exvs5pq http://wenku.baidu.com/view/c12ce66fa98271fe910ef92b.html?from=search 统计报表是按统一规定的表格形式,统一的报送程序和报表时间,自下而上提供基础统计资料,是一种具有法律性质的报表.统计报表是一

【案例分享】电力设备生产数据的多层分组统计报表实现

多层分组统计报表即按照不同的数据字段,形成多级分组,并分层级进行合计. 传统报表的实现方式大多基于 Table 控件,虽然可实现多个分组功能,但在报表显示方面有限制,只能呈现上下级的分组,而现代的复杂报表的需求,通常是左右级嵌套,有时甚至要求相同内容的单元格合并,使用 Table 控件,有太多的局限,有了矩表控件,通过简单的拖拽就能轻松实现多层分组报表,不管有多少个分组和分组小计都能简单解决. 下面会通过一个具体的案例,使用葡萄城报表中的矩表控件来讲解实现多层分组统计报表. (一)原始数据 (二

降水量与蒸发量统计报表详细注释

//降水量与蒸发量统计报表详细注释 <template> <div id="main" :style="{width:'1000px',height:'500px' }"></div> </template> <!--1 为ECharts准备一个具备大小(宽高)的Dom--> <!-- <div id="mainBar" style="height:500px;bo

一个有趣的SQL Server 层级汇总数据问题

看SQL Server大V宋大侠的博客文章,发现了一个有趣的sql server层级汇总数据问题. 具体的问题如下: parent_id emp_id emp_name total_amout     NULL 2 Andrew 200     2 1 Nancy 100     2 3 Janet 120     3 4 Michael 80     1 5 Robert 50     每个员工的总销售额=自己的销售额+其下级员工的总销售额,     比如:     Andrew = 200_