2014-02-17 47 views
0

我有一个名为Order.I我希望我的输出如下所示。请如果可能给我sql查询。存储过程接收两个日期参数,并为每一周它显示这样的报告.IE如果我通过第一个参数2014年10月2日和第二16/02/2014和类似的,如果日期则变化为每周都应该产生像this.Thanks每天在sql服务器每周报告

Day   Date   Sales 
Monday  10/02/2014 100 
Tuesday  11/02/2014 120 
Wednesday 12/02/2014 140 
Thursday 13/02/2014 160 
Friday  14/02/2014 180 
Saturday 15/02/2014 10 
Sunday  16/02/2014 78 
+0

我不确定我是否理解他的问题。但是如果你想计算每天的销售额,你只需要按日期和计数(从表中选择计数(销售)到日期[不会工作,这只是为了澄清我的意思]) –

回答

1

如果你知道每一个日期去至少有一个条目沿着以下几行将起作用:

SELECT 
    Day = DATEPART(DAYOFWEEK,dateColumnName) 
    , Date = dateColumnName 
    , Sales = COUNT(*) 
FROM 
    salesTable 
GROUP BY 
    dateColumnName 

如果它有可能有销售额为零的日期,那么你应该考虑一个临时表或添加一个日期表到你的数据库并加入。

编辑:在this article很好地描述

SELECT 
    Day = DATENAME(DW,dateColumnName) -- Wrong function previously used this will get the name 
    , Date = CONVERT(VARCHAR, dateColumnName,103) -- this returns in format dd/mm/yyyy other codes are available 
    , Sales = COUNT(*) 
FROM 
    salesTable 
GROUP BY 
    DATENAME(DW,dateColumnName) 
    ,CONVERT(VARCHAR, dateColumnName,103) 

其它码。

将以下代码添加到具有所需参数(我称它们为startDateendDate)的存储过程意味着您可以每周通过执行提供参数的存储过程来调用此代码。 (Here's some Microsoft documentation on how procedures are used

CREATE PROC procedureName (
    @startDate DATETIME 
    ,@endDate DATETIME 
) AS 
SELECT 
    Day = DATENAME(DW,dateColumnName) -- Wrong function previously used this will get the name 
    , Date = CONVERT(VARCHAR, dateColumnName,103) -- this returns in format dd/mm/yyyy other codes are available 
    , Sales = COUNT(*) 
FROM 
    salesTable 
WHERE 
    dateColumnName BETWEEN @startDate AND @endDate 
GROUP BY 
    DATENAME(DW,dateColumnName) 
    ,CONVERT(VARCHAR, dateColumnName,103) 

存在具有2个参数的潜在缺点,你可以实际显示超过1周。您可以使用单个参数创建它,并使用DATEADD函数添加或删除7天,以确定从提供的单个日期开始/结束日期。

+0

如果'dateColumnName'类型为'DATETIME' – Tom

+0

我更新了查询,更正了'DATEPART'到'DATENAME'的用法,并更新了'Date'列以转换为'VARCHAR'。原来的代码假设'DATE'列而不是'DATETIME',但第二个代码转换为一个字符串并进行相应的分组。 – talegna

+0

感谢您的答复。但请告诉我。我想传递数据类型date.And这两个日期之间的两个参数我希望我的每周记录应该像这样的问题显示 –