Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql server中的逐日周报_Sql_Sql Server - Fatal编程技术网

sql server中的逐日周报

sql server中的逐日周报,sql,sql-server,Sql,Sql Server,我有一个名为Order的表。我希望我的输出如下所示。如果可能,请给我sql查询。存储过程接收两个日期参数,每周显示如下报告。即,如果我通过第一个参数10/02/2014和第二个参数16/02/2014,以及类似的,如果日期变化,则每周应生成如下报告。谢谢 Day Date Sales Monday 10/02/2014 100 Tuesday 11/02/2014 120 Wednesday 12/02/2014 140

我有一个名为Order的表。我希望我的输出如下所示。如果可能,请给我sql查询。存储过程接收两个日期参数,每周显示如下报告。即,如果我通过第一个参数10/02/2014和第二个参数16/02/2014,以及类似的,如果日期变化,则每周应生成如下报告。谢谢

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

如果您知道每个日期都会有至少一个条目,那么可以使用以下内容:

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

如果可能有零销售的日期,那么您应该考虑一个临时表或添加一个日期表到您的数据库并加入这个。 编辑:

中很好地描述了其他代码

将以下代码添加到具有所需参数的存储过程中,我称之为startDate和endDate,这意味着您可以每周通过执行提供参数的存储过程来调用它


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

我不确定我是否理解这个问题。但是,如果您想计算每天的销售额,只需按日期进行grop和count,然后按日期从表组中选择countsales[不起作用,只是为了澄清我的意思]如果dateColumnName的类型为DATETIMEI我已经更新了查询,已将DATEPART的使用更正为DATENAME,并更新了要转换为VARCHAR的日期列。原始代码采用日期列而不是日期时间,但是第二个将转换为字符串并相应地分组。谢谢您的回复。但是请告诉我。我想传递两个数据类型date的参数。在这些日期之间,我希望我的每周记录应该如问题中所示。我不打算为您编写所有代码,希望您能够创建一个存储过程你自己却添加了相关代码。你太棒了。我得到了我想要的
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)
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)