每天从SQL DB中选择数据

Mar*_*nHN 7 sql

我在电子商务商店里有一张包含订单信息的表格.架构看起来像这样:

[订单]
Id | SubTotal | TaxAmount | ShippingAmount | DateCreated

该表仅包含每个订单的数据.因此,如果一天没有任何订单,那天没有销售数据.

我想选择过去30天的每日小计,包括那些没有销售的日子.

结果集如下所示:

日期| SalesSum
2009-08-01 | 15235
2009-08-02 | 0
2009-08-03 | 340
2009-08-04 | 0
...

这样做,只给出了订单日期的数据:

select DateCreated as Date, sum(ordersubtotal) as SalesSum
from Orders
group by DateCreated
Run Code Online (Sandbox Code Playgroud)

您可以创建一个名为Dates的表,并从该表中选择并加入Orders表.但我真的想避免这种情况,因为在处理不同的时区和事情时它不能很好地运作......

请不要笑.SQL不是我的那种东西...... :)

Jam*_*MLV 2

创建一个可以生成日期表的函数,如下所示:(
盗自http://www.codeproject.com/KB/database/GenerateDateTable.aspx

Create Function dbo.fnDateTable
(
  @StartDate datetime,
  @EndDate datetime,
  @DayPart char(5) -- support 'day','month','year','hour', default 'day'
)
Returns @Result Table
(
  [Date] datetime
)
As
Begin
  Declare @CurrentDate datetime
  Set @CurrentDate=@StartDate
  While @CurrentDate<=@EndDate
  Begin
    Insert Into @Result Values (@CurrentDate)
    Select @CurrentDate=
    Case
    When @DayPart='year' Then DateAdd(yy,1,@CurrentDate)
    When @DayPart='month' Then DateAdd(mm,1,@CurrentDate)
    When @DayPart='hour' Then DateAdd(hh,1,@CurrentDate)
    Else
      DateAdd(dd,1,@CurrentDate)
    End
  End
  Return
End
Run Code Online (Sandbox Code Playgroud)

然后,加入该表

SELECT dates.Date as Date, sum(SubTotal+TaxAmount+ShippingAmount)
FROM [fnDateTable] (dateadd("m",-1,CONVERT(VARCHAR(10),GETDATE(),111)),CONVERT(VARCHAR(10),GETDATE(),111),'day') dates 
LEFT JOIN Orders
ON dates.Date = DateCreated
GROUP BY dates.Date
Run Code Online (Sandbox Code Playgroud)