sql-一个分组SQL,如何使在查询不到结果的时候,得到一条数据

问题描述

一个分组SQL,如何使在查询不到结果的时候,得到一条数据

现在有一张xx表,表里面有如下的数据,字段名为create_date(如下1)
我用
select create_date, count(0) from xx where create_date BETWEEN date('2014-08-01') AND date('2014-09-01') group by create_date
去做个分组统计,得到了(如下2)的数据,没有19号的数据
问题:如何才能使统计的时候,即使没有19号的数据,也能得到一个0呢。

1:
create_date
2014-08-18
2014-08-20
2014-08-20
2014-08-20
2014-08-18
2014-08-20
2014-08-21
2014-08-22
2014-08-22
2014-08-22
2014-08-22
2014-08-22
2014-08-22
2014-08-22

2:
2014-08-18 2
2014-08-20 4
2014-08-21 1
2014-08-22 7

解决方案

用master..spt_values构造日期 然后与你的表LEFT JOIN就可以了

declare @startdate datetime,@enddate datetime
set @startdate='2014-08-01'
set @enddate='2014-09-01'
;with f1 as
(
select convert(varchar(10),dateadd(day,number,@startdate),120) as create_date
from
master..spt_values
where
datediff(day,dateadd(day,number,@startdate), @enddate)>=0
and number>=0
and type='p'
)

select a.create_date, isnull(count(0),0) from xx as a inner join f as b on a.create_date=b.create_date where a.create_date BETWEEN date('2014-08-01') AND date('2014-09-01') group by a.create_date

时间: 2024-08-01 18:34:13

sql-一个分组SQL,如何使在查询不到结果的时候,得到一条数据的相关文章

请问 sql 怎样 查询最接近某一值的3条数据?急急急!!!

问题描述 请问 sql 怎样 查询最接近某一值的3条数据?急急急!!! 请问 sql 怎样 查询最接近某一值的3条数据?求sql语句如1,2,6,9,120,150,160,查询最接近9的3条记录数值,既1,2,6急急急啊!!!!!!!!! 解决方案 select * from T a where (select count(*) from T where n<a.n) < 3 解决方案二: 给你个思路,将该值与其他的做减法运算,然后排序,取前三条 解决方案三: 你把9的前三个和后三个都取出来

求帮助,oracle数据库,查询出每个最新时间的那一条数据

问题描述 求帮助,oracle数据库,查询出每个最新时间的那一条数据 select p.* from (select rownum as 序号 ,n.* from (select sitename as 站点名称, RecordTime as 记录时间 ,decode(avg(case item when 211 then value else null end),0,'0.00000',trim(to_char(avg(case item when 211 then value else nu

【SQL】在SQL Server中多表关联查询问题

好久没有写SQL语句的多表连接查询,总在用框架进行持久化操作.今天写了一个多表关联查询,想根据两个字段唯一确定一条数据   失败的案例如下: SELECT cyb.id,ad.name FROM [GeneShop].[dbo].[t_member_cyb] cyb ,[GeneShop].[dbo].xx_admin ad,[GeneShop].[dbo].t_bg bg where cyb.hzjg_id = ad.id and cyb.id = bg.cyb_id and (cyb.cyb

sql中LEFT JOIN拆分成多条SQL语句 提高sql性能

本文讲解如何把一条带有一个或多个left join或right join的sql语句拆分成多条sql语句.MySQL进行连表查询效率是很低的,特别是数据很大,而且并发量很高的情况,索引都无法解决问题,最好的办法就是把sql语句拆分成多条单表查询的sql. 我们公司电商网站现在要做网站服务化,用java做中间件,PHP调用java接口获取数据,数据表也进行了拆分,分库,要求不使用连表查询,有连表查询的sql语句想办法拆分多条sql语句,然后统一使用java接口. 这样做的目的一是为了网站服务化做调

sql server 2008分组后如何实现分页查询

问题描述 sql server 2008分组后如何实现分页查询 我的SQL语句是这样的 select left(loginDate,10) ,skipUrl,count(loginDate) FROM loginlog group by skipUrl,left(loginDate,10) order by left(loginDate,10) desc 我自己试了很多总方式都不对的,不知道问题出在哪里的了?希望大侠帮忙解决下的了谢谢! select top 10 left(loginDate,

如何写一个方法用SQL语句查询一张表中有多少条数据,方法改怎么写?

问题描述 如何写一个方法用SQL语句查询一张表中有多少条数据,方法改怎么写? 将查询的的返回值为整型 参考用例 类似 以下方法查询政治类新闻人数 新手不知道该如何改动成自己需要的方法 public Map<String, Long> sumPolEntNews(){ //查询政治类新闻人数总和 String sql = "select count(*) from t_user where newsh ='政治类新闻' "; Map<String, Long> m

求问一个关于SQL父子类编号查询语句的问题!

问题描述 一个表knocategory中有CODE和PCODE字段,CODE是子类编号,假如CODE是1001001,1001002,1001003这样的,那么PCODE就是1001.CODE是1001001001,那么PCODE就是1001001,要求查询出这张表中当PCODE和CODE相等时的CODE编号SQL语句咋写... 解决方案 解决方案二:...123有好心人吗.解决方案三:selectcodefromknocategorya,knocategorybwherea.code=b.co

SQL Server如何处理到达数据库引擎的查询

当一个查询到达数据库引擎时,SQL SERVER执行两个主要的步骤来产生期望的查询结果.第一步是查询编译,它生成查询计划,第二步执行这个查询计划. SQL SERVER 2005中的查询编译由三个步骤组成:分析.代数化及查询优化.完成这些步骤后,编译器把经过优化的查询计划保存到过程缓存中.在这里,执行引擎把该计划转换为可执行的形式,然后执行其中的步骤以生成查询结果.如果今后再次执行相同的查询或存储过程时,过程缓存已经包含了该计划,则跳过编译步骤,直接重用缓存的计划来执行该查询或存储过程. 关于S

利用SQL Profiler处理开销较大的查询

原文:利用SQL Profiler处理开销较大的查询 当SQL Server的性能变差时,最可能发生的是以下两件事: 首先,某些查询产生了系统资源上很大的压力.这些查询影响整个系统的性能,因为服务器无法足够快速地服务其他SQL查询. 另外,开销较大的查询阻塞了其他请求相同数据库资源的查询,进一步降低了这些查询的性能.优化开销较大的查询不仅改进它们本身的性能,而且减少数据库阻塞和SQL Server资源压力从而提高了其他查询的性能. 识别开销较大的查询 SQL Server的目标是在最短时间内将结