我的查询收集了一个技术员每天的销售数据。
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只查看最近几周的数据。
发布于 2019-07-11 03:46:27
查看“DatePart”函数。您可以使用它来识别给定日期所在的一年中的哪一周,并且它似乎会在周日翻转。例如:
datepart(week, '2019-07-06') -- Saturday, returns 27
datepart(week, '2019-07-07') -- Sunday, returns 28
单凭这一点就能让你振作起来。但是,您可以添加更多的技术来获得一个结果集中的所有信息。
考虑下面的ordhdr表:
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');
..。和以下明细表:
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、交叉应用和分组集,您可以做到这一点:
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
这将为您提供每日、每周和每年的总计。
https://stackoverflow.com/questions/56973726
复制相似问题