有表 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秒 不到! 唉! 厉害厉害!
[Access]sql随机抽取记录 [Access]ASP&SQL让select查询结果随机排序的实现方法 [系统软件]SQL语句性能优化--LECCO SQL Expert [C语言系列]SQL Server到DB2连接服务器的实现 [C语言系列]SQL Server到SYBASE连接服务器的实现 [C语言系列]SQL Server到SQLBASE连接服务器的实现 [C语言系列]SQL Server连接VFP数据库的实现 [C语言系列]ASP+SQL Server之图象数据处理 [C语言系列]SQL Server连接ACCESS数据库的实现 [C语言系列]DBA的最佳选择—图形界面还是T-SQL命令?
|