sqlServer中 分类报表sql技巧 ,很实用

server|sqlserver|技巧

有表 tableA 如下:-----------------------------------------------------id,    type ,   countNumber ,   countDate1 A 10  2005-02-01 21:23:342 B 8  2005-02-01 21:23:343 C 5  2005-02-01 21:23:344 B 4  2005-02-01 11:23:345 C 5  2005-02-01 22:23:346 A 11  2005-02-02 12:23:347 B 9  2005-02-02 14:23:348 C 8  2005-02-02 17:23:349 A 15  2005-02-02 19:23:3410 C 6  2005-02-02 04:23:3411 A 7  2005-02-03 1:23:3412 B 11  2005-02-03 2:23:3413 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 tableAgroup by convert(char(10),countDate,20)

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

时间: 2024-10-31 15:47:57

sqlServer中 分类报表sql技巧 ,很实用的相关文章

sqlserver中一条sql语句把插入数据的ID返回出来,oracle中sql语句要怎么写?

问题描述 sqlserver中一条sql语句把插入数据的ID返回出来,oracle中sql语句要怎么写? sqlserver中一条sql语句把插入数据的ID返回出来,oracle中sql语句要怎么写? 解决方案 oracle,sqlserver分页查询sql语句重复的数据只取一条,SQL语句如何写 解决方案二: select test.currval from dual 解决方案三: oracle里面不是差不多的吗

数据仓库中复杂报表SQL语句写法

在数据仓库的基本报表制作过程中,通常会使用SQL作为数据源,可是普通的SQL实在不适合处理一些较为复杂的逻辑判断;一般而言,待查询的数据类型主要包括日期型.数字型.字符串这三类数据类型;在报表查询界面前段,实际上会对查询的数据作一些缺省处理,例如有些字段可输可不输,输入的字段需要按照输入的内容进行查询,而未输入的字段通常会选择忽略该条件的存在,如何判断该字段是否输入了呢,当然是针对这些未输入的字段提供一些缺省值了,例如某个数字类型的字段未输入,则赋一个缺省值-1,某个字符串字段未输入,则赋一个缺

c# .net在WEB页中的COOKIES设置技巧_实用技巧

一.设置cookies的方法很简单,有以下两种方法: 1.直接添加Cookie值: Response.Cookies["userName"] = "Tom"; Response.Cookies["userName"].Expires = DateTime.Now.AddDays(1) ; \\过期时间,在Cookies文件中无法查看,也不能调用. 2.创建Cookie对象的一个实例: HttpCookie cookie=new HttpCooki

[c#]asp.ent下开发中Tag的开发技巧_实用技巧

网站开发常用关键字(tag),一般需要获得最多的被采用的Tag,也就是流行词. 通常思路是将关键字tag保存到单独表中,然后在其他表中根据一组id进行对多个关键字进行标识.因为一个文章可以选择多个tag,查询的时候颇为麻烦. 所以我在开发中利用了这样的方法,当然不见得多高明 :),分享下经验. 将tag直接保存在文章的表中,如Tag字段,tag为"c#"和".net",则Tag字段值为"c#/.net"就是依/符号分割tag,这样数据库中保存的是

ios中的代码重构技巧-实用!

其中有利用block实现类似表驱动法优化复杂if-else结构的方法(类似于c中函数指针在表驱动法中的应用),注意体会其中的编程思想- http://www.cocoachina.com/applenews/devnews/2014/0816/9397.html

asp.net实现将Excel中多个sheet数据导入到SQLSERVER中的方法_实用技巧

本文实例讲述了asp.net实现将Excel中多个sheet数据导入到SQLSERVER中的方法.分享给大家供大家参考,具体如下: public DataSet GetDataSet(string filePath) { string Connstr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + filePath + "';Extended Properties='Excel 8.0;HD

ASP.NET中水晶报表的使用方法详解_实用技巧

前一段时间,由于在项目中要用到报表做统计,所以我学习了一下ASP.NET水晶报表的使用.水晶报表的执行模式(也就是取数据的方法)可以分为两种: 第一种是Pull模式:被请求时,水晶报表直接根据指定的驱动连接数据库然后组装这些数据. 另外一种就是Push模式:此时开发者不得不自己编写代码连接数据并组装DataSet,同时将它传送至报表.在些这种情况下,通过使用连接共享以及限制记录集合的大小,可以使用报表性能最大化. 水晶报表中的报表类型也分为两种: --StrongTyped 报表: 当你将报表文

将Access数据库中数据导入到SQL Server中的详细方法实例_实用技巧

Default.aspx 复制代码 代码如下: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="AccessToSQL.aspx.cs" Inherits="AccessToSQL" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "

被忽视但很实用的那部分SQL

原文:被忽视但很实用的那部分SQL 一.前言       虽然我们大多数人都学习过SQL,但是经常忽略它.总是会自以为学到的已经足够用了,从而导致我们在实际开发的过程中遇到复杂的问题后只能在检索数据后通过传统的代码来完成,但是其中很多的功能利用SQL就可以轻松的办到,所以我们开始重视SQL,它的地位不亚于C#,javascript.   二.目录       1.多行插入       2.将其他表数据插入       3.子查询       4.通用表表达式(CTE)       5.MERGE