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