sqlServer中 分类报表sql技巧

原创 2007年10月12日 16:16:00

有表 tableA 如下:

id,    type ,   countNumber ,   countDate
1 A 10  2005-02-01 21:23:34
2 B 8  2005-02-01 21:23:34
3 C 5  2005-02-01 21:23:34
4 B 4  2005-02-01 11:23:34
5 C 5  2005-02-01 22:23:34
6 A 11  2005-02-02 12:23:34
7 B 9  2005-02-02 14:23:34
8 C 8  2005-02-02 17:23:34
9 A 15  2005-02-02 19:23:34
10 C 6  2005-02-02 04:23:34
11 A 7  2005-02-03 1:23:34
12 B 11  2005-02-03 2:23:34
13 C 12  2005-02-03 5:23:34
.......................

想要用一条语句生成如下的报表

日期   类型A 类型B 类型C
2005-02-01   10 12 10 
2005-02-02   26 9 14 
2005-02-03   7 11 12 

我用的是如下的sql语句:

SELECT
 a.DATEFMT
 ,(select sum(*) from tableA where type='A' and convert(char(10),countDate,20)= a.DATEFMT) typeA
 ,(select sum(*) from tableA where type='B' and convert(char(10),countDate,20)= a.DATEFMT) typeB
 ,(select sum(*) from tableA where type='C' and convert(char(10),countDate,20)= a.DATEFMT) typeC

FROM
(
 SELECT convert(char(10),countDate,20) DATEFMT
 FROM tableA
 GROUP BY convert(char(10),countDate,20)
) a

但是这条语句在sqlserver 上执行起来特别的慢,要很久(20多秒),tabelA 中有9万条数据. 而我在mySql(表中有2万条数据)上执行就快很多!

后来在论坛上看到高手这样写

select convert(char(10),countDate,20),
typeA=sum(case type when A then CountNumber else 0 end),
typeB=sum(case type when B then CountNumber else 0 end),
typeC=sum(case type when C then CountNumber else 0 end)
From tableA
group by convert(char(10),countDate,20)

只用 1秒 不到!  唉! 厉害厉害!

 

ReportingServies——SQLServer报表开发综合实例

上一篇:ReportingServies报表开发实例教程 如果我们安装了sqlserver2008 R2,将会自动安装一个报表开发工具 不要以为此报表开发工具只适合于sqlserver2008,...
  • zouyujie1127
  • zouyujie1127
  • 2015年01月27日 19:03
  • 19010

ReportingServies报表开发实例教程

效果图如下: 1、我们先完成sql语句的编写,以下是各表和关键字段: --t:hx_t_waterusedamount--用水水量 hx_t_waterusedamountid --f:hx_fr...
  • zouyujie1127
  • zouyujie1127
  • 2014年11月22日 16:26
  • 3702

sql各种查询技巧

SQL Server T-SQL高级查询 高级查询在数据库中用得是最频繁的,也是应用最广泛的。 Ø 基本常用查询 --select select * from studen...
  • u010159842
  • u010159842
  • 2017年04月17日 09:07
  • 187

oracle sql语句根据交易类型生成统计报表...

公司有个需求,需要以商户为基础得到所有商户每类交易收费多少的统计报表,在经过百度后和自己修改达到了以下效果: 其中F1到F10代表我司的业务种类,SUMAMT为总计。下图为我们的业务...
  • qq_15824553
  • qq_15824553
  • 2016年11月02日 16:04
  • 474

SQL Server监控方法

1、Windows 事件日志(Event Log) 可以在运行中直接输入:eventvwr.msc /s 来启动事件查看器,界面如下: 也可以保存事件日志,或者是打开以保存的事件日志: ...
  • yupeigu
  • yupeigu
  • 2014年05月25日 18:09
  • 2582

MS SQL Server结果生成HTML表格并发送邮件

配置邮件服务器 在SQL管理器中找到“管理”,在“数据库邮件”上面右键,选择“配置数据库邮件”,如果没有开启,系统会提示开启。 进去之后配置好账户和配置文件 生成HTML表格 ...
  • apollokk
  • apollokk
  • 2017年06月27日 11:17
  • 614

SQL SERVER中索引类型包括的三种类型分别是

 唯一索引(UNIQUE) 聚集索引(CLUSTERED) 非聚集索引(NONCLUSTERED) 主键与唯一索引的区别  主键是一种约束,唯一索引是一种索引,两者在本...
  • dingxingmei
  • dingxingmei
  • 2014年02月18日 09:50
  • 12879

SqlServer 根据字段分类汇总信息

在一张基础表中,我们经常要根据一个字段的不同表达方式来汇总数据。下面我们将进行简单的汇总操作。 在数据库中创建一个名为test的表 字段类型如下图 插入数据如下图 这就是基...
  • enpterexpress
  • enpterexpress
  • 2015年08月18日 00:12
  • 6349

SQL Server 2008中的CTE递归查询得到一棵树(按照每颗树的架构排列)

感觉这个CTE递归查询蛮好用的,先举个例子:   [c-sharp] view plain copy  print? use City;   "http://lib.csdn.net...
  • goodyuedandan
  • goodyuedandan
  • 2017年04月17日 14:50
  • 1014

mysql 按日、周、月、年统计sql语句整理,实现报表统计可视化

最近在做报表统计,前端可视化插件用的是Echarts,个人认为是目前免费插件里的翘楚http://echarts.baidu.com/demo.html#pie-doughnut例子演示现在重点如何把...
  • u010543785
  • u010543785
  • 2016年08月29日 17:14
  • 4264
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sqlServer中 分类报表sql技巧
举报原因:
原因补充:

(最多只允许输入30个字)