当前位置: 代码迷 >> Sql Server >> 数据库查询有关问题的
  详细解决方案

数据库查询有关问题的

热度:4   发布时间:2016-04-24 19:43:17.0
数据库查询问题的求助
求助:我想查询sql里面12年10月至13年4月这段时间的使用热量,如果这个月没有记录,时间字段显示时间,使用热量显示0,应该怎么修改。select top 7 SUBSTRING(a.dtime1,1,7) as dtime1, case when a.sum1-b.SUM2 <0 then 0 else a.sum1-b.SUM2 end   from 
(select top 12 SUBSTRING(时间,1,7) as dtime1 ,SUM(累计热量) as sum1 from VMeterInfo where (SUBSTRING(时间,1,7) between substring('2012-11-01',1,7)and substring('2013-04-30',1,7)) and 小区编号=288  group by SUBSTRING(时间,1,7) order by SUBSTRING(时间,1,7))a,
(select top 12 SUBSTRING(时间,1,7) as dtime2,SUM(累计热量) as sum2 from VMeterInfo where (SUBSTRING(时间,1,7) between substring('2012-10-01',1,7)and substring('2013-03-30',1,7)) and 小区编号=288 group by SUBSTRING(时间,1,7)order by SUBSTRING(时间,1,7))b
where SUBSTRING(a.dtime1,6,7)=SUBSTRING(b.dtime2,6,7)+1 or SUBSTRING(a.dtime1,6,7)=SUBSTRING(b.dtime2,6,7)-11


这是没有记录的时候显示的,但是我想没有记录的时候也会显示6条记录,但是使用热量那栏都是0

------解决方案--------------------

--try this
select top 7 SUBSTRING(a.dtime1,1,7) as dtime1, case when a.sum1-b.SUM2 <0 then 0 else a.sum1-b.SUM2 end   from 
(select top 12 SUBSTRING(时间,1,7) as dtime1 ,SUM(累计热量) as sum1 from VMeterInfo where (SUBSTRING(时间,1,7) between substring('2012-11-01',1,7)and substring('2013-04-30',1,7)) and 小区编号=288  group by SUBSTRING(时间,1,7) order by SUBSTRING(时间,1,7))a LEFT JOIN 
(select top 12 SUBSTRING(时间,1,7) as dtime2,SUM(累计热量) as sum2 from VMeterInfo where (SUBSTRING(时间,1,7) between substring('2012-10-01',1,7)and substring('2013-03-30',1,7)) and 小区编号=288 group by SUBSTRING(时间,1,7)order by SUBSTRING(时间,1,7))b
on SUBSTRING(a.dtime1,6,7)=SUBSTRING(b.dtime2,6,7)+1 or SUBSTRING(a.dtime1,6,7)=SUBSTRING(b.dtime2,6,7)-11

------解决方案--------------------
最好是先构造出 从12年4月-13年3月的日期数据,然后用这个数据左关联你的业务数据
------解决方案--------------------
仔细看了一下,你这时要求 环比是吧。
------解决方案--------------------
try this,

declare @x1 varchar(15),@x2 varchar(15)

select @x1='2012-10-01',@x2='2013-04-30'  --> 定义开始时间,结束时间

select c.dtime,isnull(d.qty,0) '使用热量'
from
(select left(convert(varchar,dateadd(m,number,@x1),23),7) 'dtime'
 from master.dbo.spt_values
 where type='P' and number between 0 and datediff(m,@x1,@x2)) c
left join
(select top 7 SUBSTRING(a.dtime1,1,7) as dtime1, 
              case when a.sum1-b.SUM2 <0 then 0 else a.sum1-b.SUM2 end 'qty'
from 
(select top 12 SUBSTRING(时间,1,7) as dtime1,
               SUM(累计热量) as sum1 
 from VMeterInfo 
 where (SUBSTRING(时间,1,7) 
        between substring('2012-11-01',1,7) and substring('2013-04-30',1,7)) 
 and 小区编号=288 
 group by SUBSTRING(时间,1,7) 
 order by SUBSTRING(时间,1,7)) a,
(select top 12 SUBSTRING(时间,1,7) as dtime2,
               SUM(累计热量) as sum2 
 from VMeterInfo 
 where (SUBSTRING(时间,1,7) 
        between substring('2012-10-01',1,7) and substring('2013-03-30',1,7)) 
 and 小区编号=288 
 group by SUBSTRING(时间,1,7)
 order by SUBSTRING(时间,1,7)) b
where SUBSTRING(a.dtime1,6,7)=SUBSTRING(b.dtime2,6,7)+1 
or SUBSTRING(a.dtime1,6,7)=SUBSTRING(b.dtime2,6,7)-11) d on c.dtime=d.dtime1
  相关解决方案