SQL回炉系列(五) 为显示曲线图获取不同时间颗粒的数据

在项目中,需要给用户展现某栋建筑的能耗曲线,用户可以选择单个电表,也可以选择总表,可以选择按年逐月、按月逐日或按日逐时。这是典型的数据分析和计算过程。闲话少说,直接上代码:

USE [PRODMS]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER proc [dbo].[getConsumptionChartData]
 (
    @DateBegin  varchar(20),
    @DateEnd Varchar(20),
    @ty varchar(2), --y代表年,m代表月,d代表日逐时,b代表区间
    @backid varchar(3) -- 0 代表总能耗,其它数字代表各个电表
 )
 as
 begin
    if @ty='y' -- 按年逐月
    begin
        if(@backid='0') -- 总能耗
        begin               
            select sum(consumption) ep , sum(price) price, convert(varchar(7),getTime,120) getTime from HourCost   
            where convert(varchar(4),getTime,120)=convert(varchar(4),@DateBegin,120)    
            group by convert(varchar(7),getTime,120)
            order by gettime
        end
        else -- 单个房间的能耗
        begin
            select sum(consumption) ep , sum(price) price, convert(varchar(7),getTime,120) getTime from HourCost   
            where back=@backid
            and convert(varchar(4),getTime,120)=convert(varchar(4),@DateBegin,120)  
            group by convert(varchar(7),getTime,120)
            order by gettime
        end
    end

    if @ty='m' -- 按月逐日
    begin
        if(@backid='0') -- 总能耗
        begin 
            select sum(consumption) ep , sum(price) price, convert(varchar(10),getTime,120) getTime from HourCost 
            where convert(varchar(7),getTime,120)=convert(varchar(7),@DateBegin,120)    
            group by convert(varchar(10),getTime,120)
            order by gettime    
        end
        else -- 单个房间的能耗
        begin
            select sum(consumption) ep , sum(price) price, convert(varchar(10),getTime,120) getTime from HourCost   
            where back=@backid
            and convert(varchar(7),getTime,120)=convert(varchar(7),@DateBegin,120)  
            group by convert(varchar(10),getTime,120) 
            order by gettime    
        end
    end

    if @ty='d' -- 按日逐时
    begin   
        if(@backid='0') -- 总能耗
        begin
            select sum(consumption) ep , sum(price) price, convert(varchar(13),getTime,120)+':00:00' getTime from HourCost 
            where convert(varchar(10),getTime,120)=convert(varchar(10),@DateBegin,120)  
            group by convert(varchar(13),getTime,120)
            order by gettime    
        end
        else -- 单个房间的能耗
        begin
            select back, consumption ep , convert(varchar(13),getTime,120)+':00:00' gettime, price from HourCost 
            where back=@backid
            and convert(varchar(10),getTime,120)=convert(varchar(10),@DateBegin,120)    
            order by gettime            
        end
    end 
    if @ty='b' -- 时间区间
    begin
        if(@backid='0') -- 总能耗
        begin 
            select convert(varchar(13),getTime,120)+':00:00' gettime, sum(consumption) ep ,sum(price) price from HourCost 
            where  convert(varchar(13),getTime,120)>=convert(varchar(13),@DateBegin,120)
            and convert(varchar(13),getTime,120)<=convert(varchar(13),@DateEnd,120)
            group by convert(varchar(13),getTime,120)   
            order by gettime    
        end
        else -- 单个房间
        begin
            select back,  gettime, consumption ep ,price from HourCost 
            where back=@backid
            and convert(varchar(13),getTime,120)>=convert(varchar(13),@DateBegin,120)
            and convert(varchar(13),getTime,120)<=convert(varchar(13),@DateEnd,120)
            order by gettime    
        end
    END

 end



 --execute getConsumptionChartData '2014-08','2014-02-15 23:00:00','m','0'
 --execute getConsumptionChartData '2014','2014-02-15 23:00:00','y','14'
 --execute getConsumptionChartData '2015-03-26','2014-02-15 23:00:00','d','7'
 --execute getConsumptionChartData '2015-03-20 02:00:00','2015-03-20 12:00:00','b','6'  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值