2016-05-17 60 views
1

,这是这里每天我的存储过程..有多少新订单和oldo rders是有整体一个月.. 我是申报日期,totalorders和收入..集团的日期部分订单总额

结果我越来越这是唯一31 ..我想daywise订单数月的最后一天..

alter Procedure sp_NewandOld 
(
@StartDate DATETIME,   
@EndDate DATETIME 
) 
--[sp_NewandOld] '01/01/2015','01/31/2015' 
AS 
BEGIN 
---New Customer Orders Breakup 
Declare @NewCount int, @NewRevenue int, @NewDate nvarchar(50) 
select @NewDate=(datepart(day,od.OrderDate)), 
@NewCount= count(*), 
@NewRevenue= SUM(CONVERT(decimal(18,2),od.TotalAmount)) from orderdetails od 
inner join customer c on od.customerid=c.customerid 
where Convert(Datetime,Convert(varchar(50),od.orderdate,101)) = Convert(Datetime,Convert(varchar(50),c.registereddate,101)) 
and Convert(Datetime,convert(varchar(50),od.orderdate,101)) between @StartDate and @EndDate 
group by datepart(day, od.OrderDate) 


Declare @OldCount int, @OldRevenue int, @OldDate nvarchar(50) 
select @OldDate=(datepart(day,od.OrderDate)), 
@OldCount= count(*), 
@OldRevenue=SUM(CONVERT(decimal(18,2),od.TotalAmount)) from orderdetails od 
inner join customer c on od.customerid=c.customerid 
where Convert(Datetime,Convert(varchar(50),od.orderdate,101)) != Convert(Datetime,Convert(varchar(50),c.registereddate,101)) 
and Convert(Datetime,convert(varchar(50),od.orderdate,101)) between @StartDate and @EndDate 
group by datepart(day, od.OrderDate) 

select @NewDate,@NewCount,@OldCount,@NewRevenue,@OldRevenue 
End 
+1

请编辑您的问题以包含样本数据和期望的结果。 –

回答

0

您只选择第一行值转换为变量,你需要得到所有。更改您的查询以获取所有数据:

alter Procedure sp_NewandOld (
    @StartDate DATETIME,   
    @EndDate DATETIME 
) 
AS 
BEGIN 

    with [new] as (
     select datepart(month,od.OrderDate) as newdatemonth, 
       datepart(day,od.OrderDate) as newdate, 
       count(*) as NewCount, 
       SUM(CONVERT(decimal(18,2),od.TotalAmount)) as NewRevenue 
     from orderdetails od 
     inner join customer c 
      on od.customerid=c.customerid 
     where Convert(Datetime,Convert(varchar(50),od.orderdate,101)) = Convert(Datetime,Convert(varchar(50),c.registereddate,101)) 
     and Convert(Datetime,convert(varchar(50),od.orderdate,101)) between @StartDate and @EndDate 
     group by datepart(month,od.OrderDate), datepart(day, od.OrderDate) 
    ), [old] as (
     select datepart(month,od.OrderDate) as OldDateMonth, 
       datepart(day,od.OrderDate) as OldDate, 
       count(*) as OldCount, 
       SUM(CONVERT(decimal(18,2),od.TotalAmount)) as OldRevenue 
     from orderdetails od 
     inner join customer c 
      on od.customerid=c.customerid 
     where Convert(Datetime,Convert(varchar(50),od.orderdate,101)) != Convert(Datetime,Convert(varchar(50),c.registereddate,101)) 
     and Convert(Datetime,convert(varchar(50),od.orderdate,101)) between @StartDate and @EndDate 
     group by datepart(month,od.OrderDate) , datepart(day, od.OrderDate) 
    ) 

    select n.newdatemonth, 
      n.NewDate, 
      n.NewCount, 
      o.OldCount, 
      n.NewRevenue, 
      o.OldRevenue 
    from [new] n 
    inner join [old] o 
     on n.newdate = o.olddate and n.newdatemonth = o.OldDateMonth 

End 
+0

其worikng,但我wnat新计数百分比和旧计数百分比..我应该在哪里提到? – Maybe

+0

你可以添加这个查询,你想使用什么公式? – gofr1

+0

我在上面提到的查询中添加了每天总计数......现在我想每天新旧计数的百分比......如果新计数:12,旧:13,总数:25,现在我想要百分比? (12/30)×100 ???这是对的吗??? – Maybe