SQL server 2005中竖排变横排显示

create table r(num varchar(4),[time] varchar(10),rc int,dc int)
go
insert r
select 1,'2009-07-26',100,200 union all
select 3,'2009-07-25',87,352 union all
select 3,'2009-07-26',121,45 union all
select 2,'2009-07-26',100,76 union all
select 1,'2009-07-01',87,68 union all
select 1,'2009-07-02',121,89 union all
select 1,'2009-07-03',10,102 union all
select 4,'2009-07-23',50,32
go

CREATE PROCEDURE [dbo].[up_Test]
@StartDate DATETIME, --查询开始日期
@EndDate DATETIME --查询结束日期
AS
DECLARE @tmpCondition VARCHAR(200)
DECLARE @tmpsql VARCHAR(MAX)
DECLARE @CurrDate DATETIME
DECLARE @tmpDate VARCHAR(10)
SET @EndDate=DateAdd(Day,1,@EndDate)
--如果数据量较大建议使用临时表
SET @tmpCondition ='WHERE T1.[time]>='''+ CONVERT(VARCHAR(10),@StartDate,120)  +''' AND T1.[time]<'''+ CONVERT(VARCHAR(10),@EndDate,120)  +''''
SET @tmpsql=''
SET     @CurrDate = DateAdd(Day,-30, Convert(Varchar(10), Getdate(), 120))
WHILE   @CurrDate <= DateAdd(Day,-1, Convert(Varchar(10), Getdate(), 120))
BEGIN 
    SET @tmpDate = CONVERT(VARCHAR(10),@CurrDate,120)
    SET @tmpsql = @tmpsql + ', CAST(SUM(CASE WHEN [time] = '''+@tmpDate+''' THEN T1.dc ELSE 0 END) AS INT) AS ''['+CONVERT(VARCHAR(10),@CurrDate,120)+']配发''' 
    SET @CurrDate = @CurrDate +1
END
SET     @CurrDate = DateAdd(Day,-30, Convert(Varchar(10), Getdate(), 120))
WHILE   @CurrDate <= DateAdd(Day,-1, Convert(Varchar(10), Getdate(), 120))
BEGIN 
    SET @tmpDate = CONVERT(VARCHAR(10),@CurrDate,120)
    SET @tmpsql = @tmpsql + ', CAST(SUM(CASE WHEN [time] = '''+@tmpDate+''' THEN T1.rc ELSE 0 END) AS INT) AS ''['+CONVERT(VARCHAR(10),@CurrDate,120)+']销售''' 
    SET @CurrDate = @CurrDate +1
END
SET @tmpsql= 'SELECT ISNULL(T1.num,''合计'') AS ID,sum(dc) as dc ,sum(rc) as rc '+@tmpsql 
           +' FROM r T1  GROUP BY
            T1.num WITH ROLLUP '
PRINT @tmpsql
EXEC (@tmpsql)
go

exec up_Test N'2009-01-01','2009-06-01'

drop table r
drop proc up_Test

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值