首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用SQLServer management studio收集每周累计销售额

使用SQLServer management studio收集每周累计销售额
EN

Stack Overflow用户
提问于 2019-07-10 23:10:03
回答 1查看 51关注 0票数 0

我的查询收集了一个技术员每天的销售数据。

代码语言:javascript
复制
select
  SUM(O.SUB_TOTAL) AS TOTALSALES,
  COUNT(DISTINCT O.ORDER_NO) AS BILLABLEORDERS
FROM ordhdr o
INNER JOIN schedule s ON s.ID_VAL = o.ORDER_NO
WHERE
  s.DATE = Convert(varchar(10), GETDATE()-1,121)
  AND O.[TYPE] = 'SVC'

然而,我也想获得每周的累计销售额,以了解他的每周数字是否在正轨上,但我正在努力转换查询。

这必须在每个星期天或星期一重置,这样我就不能使用CurrentDate-7函数。

我不知道如何使用SQL-Server Management Studio只查看最近几周的数据。

EN

回答 1

Stack Overflow用户

发布于 2019-07-11 03:46:27

查看“DatePart”函数。您可以使用它来识别给定日期所在的一年中的哪一周,并且它似乎会在周日翻转。例如:

代码语言:javascript
复制
datepart(week, '2019-07-06') -- Saturday, returns 27
datepart(week, '2019-07-07') -- Sunday, returns 28

单凭这一点就能让你振作起来。但是,您可以添加更多的技术来获得一个结果集中的所有信息。

考虑下面的ordhdr表:

代码语言:javascript
复制
declare @ordhdr table (
    order_no int,
    sub_total decimal(8,2),
    type varchar(15)
);

insert @ordhdr values
    (1, 23.25, 'svc'),
    (2, 324.23, 'svc'),
    (3, 423.89, 'svc'),
    (4, 324.80, 'svc'),
    (5, 234.23, 'svc'),
    (6, 923.23, 'svc');

..。和以下明细表:

代码语言:javascript
复制
declare @schedule table (id_val int, date date);

insert @schedule values 
    (1, '2019-07-04'),
    (2, '2019-07-04'),
    (3, '2019-07-08'),
    (4, '2019-07-09'), 
    (5, '2019-07-09'), 
    (6, '2019-07-10');

那么,使用datepart、datename、交叉应用和分组集,您可以做到这一点:

代码语言:javascript
复制
select      ap.year,
            ap.weekOfYear,

            dayOfWeek = 
                case 
                when ap.weekOfYear is null then '<entire year>'
                when ap.dayOfWeek is null then '<entire week>'
                else ap.dayOfWeek
                end,

            s.date,
            totalsales = sum(o.sub_total),
            billableorders = count(distinct o.order_no)
from        @ordhdr o
join        @schedule s on s.id_val = o.order_no 
cross apply (select 
                year = datepart(year, s.date),
                weekOfYear = datepart(week, s.date),
                dayOfWeek = datename(weekday, s.date)
            ) ap
where       o.type = 'svc'
group by    grouping sets (
                (ap.year, ap.weekOfYear, ap.dayOfWeek, s.date),
                (ap.year, ap.weekOfYear),
                (ap.year)
            )
order by    weekOfYear, date

这将为您提供每日、每周和每年的总计。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56973726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档