Sql server 使用总月日总订单按日期部分分组
这是我的存储过程。。一个月内每天有多少新订单和旧订单。。 我要申报日期、订单总数和收入 结果我只得到一个月的最后一天,也就是31号。。我要按日计算的订单Sql server 使用总月日总订单按日期部分分组,sql-server,datetime,group-by,Sql Server,Datetime,Group By,这是我的存储过程。。一个月内每天有多少新订单和旧订单。。 我要申报日期、订单总数和收入 结果我只得到一个月的最后一天,也就是31号。。我要按日计算的订单 alter Procedure sp_NewandOld ( @StartDate DATETIME, @EndDate DATETIME ) --[sp_NewandOld] '01/01/2015','01/31/2015' AS BEGIN ---New Customer Orders Breakup Decl
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
您只选择变量中的第一行值,并且需要获取所有值。将查询更改为此以获取所有数据:
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
您只选择变量中的第一行值,并且需要获取所有值。将查询更改为此以获取所有数据:
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
请编辑您的问题,使其包含样本数据和期望结果。请编辑您的问题,使其包含样本数据和期望结果。这是可行的,但我有新计数百分比和旧计数百分比。。我应该在哪里提到???您可以将此添加到查询中,您想使用什么公式?我在上面提到的查询中添加了每天的总计数..现在我想要每天新计数和旧计数的百分比。。。如果新计数:12,旧计数:13,总数:25,现在我要百分比???(12/30)*100??? 是正确的吗?(12/25)*100我想((o.OldCount*100)/t.TotalCount)像这样工作。。我在select语句中提到了…它是worikng,但我有新计数百分比和旧计数百分比。。我应该在哪里提到???您可以将此添加到查询中,您想使用什么公式?我在上面提到的查询中添加了每天的总计数..现在我想要每天新计数和旧计数的百分比。。。如果新计数:12,旧计数:13,总数:25,现在我要百分比???(12/30)*100??? 是正确的吗?(12/25)*100我想((o.OldCount*100)/t.TotalCount)像这样工作。。我在select语句中提到。。。