SQL Server 2012 - 带有最佳日期标记的销售摘要

时间:2016-01-25 21:33:11

标签: sql sql-server

我需要做一份我已经完成的销售报告,但是老板想要在最繁忙的一周中找到一个标记!

我的桌子是

分隔间

TillID  BranchID    TillNo  OperatorID
1       1           1       1
2       1           2       2
3       1           3       3
4       2           1       4
5       3           1       5

销售

TillID  SaleTS              Net
1       01/01/2016 09:00    9
1       01/01/2016 10:00    76
2       01/01/2016 09:00    35
2       01/01/2016 10:00    84
3       01/01/2016 09:00    68
3       01/01/2016 10:00    43
4       01/01/2016 09:00    12
4       01/01/2016 10:00    0
5       01/01/2016 09:00    79
5       01/01/2016 10:00    25
1       02/01/2016 09:00    90
1       02/01/2016 10:00    16
2       02/01/2016 09:00    58
2       02/01/2016 10:00    96
3       02/01/2016 09:00    36
3       02/01/2016 10:00    25
4       02/01/2016 09:00    85
4       02/01/2016 10:00    74
5       02/01/2016 09:00    14
5       02/01/2016 10:00    12
1       03/01/2016 09:00    45
1       03/01/2016 10:00    78
2       03/01/2016 09:00    98
2       03/01/2016 10:00    65
3       03/01/2016 09:00    32
3       03/01/2016 10:00    19
4       03/01/2016 09:00    37
4       03/01/2016 10:00    79
5       03/01/2016 09:00    46
5       03/01/2016 10:00    13

结果

TillID  SaleDate    Day         DailyNet    BestDay
1       01/01/2016  Friday      85          No
1       02/01/2016  Saturday    106         No
1       03/01/2016  Sunday      123         Yes
2       01/01/2016  Friday      119         No
2       02/01/2016  Saturday    154         No
2       03/01/2016  Sunday      163         Yes
3       01/01/2016  Friday      111         Yes
3       02/01/2016  Saturday    61          No
3       03/01/2016  Sunday      51          No
4       01/01/2016  Friday      12          No
4       02/01/2016  Saturday    159         Yes
4       03/01/2016  Sunday      116         No
5       01/01/2016  Friday      104         Yes
5       02/01/2016  Saturday    26          No
5       03/01/2016  Sunday      59          No

我的查询除了总数之外都做了一切,我可以通过构建一个每天最大的派生表来做到这一点,但随着时间的推移链接这些表会变慢。

我一直在寻找并找不到另一种方法来获得这个标记。

提前谢谢。

此致

吉姆

2 个答案:

答案 0 :(得分:1)

如果你想要总计使用ROLLUP子句:

https://technet.microsoft.com/en-us/library/ms189305%28v=sql.90%29.aspx

BestDay可以这样制作:

case when DailyNet = max(DailyNet) over(partition by TillID) then 'Yes' else 'No'

答案 1 :(得分:0)

根据收银台,我猜你是一家零售公司,所以你的周数不会与日历周数相对应,因为一般情况下你想要从周日到周六或周一到周日的周数。 理想情况下,您可以使用系统日历来识别周和月。 但作为一个简单的技巧,您可以根据适当的偏移量简单地分配周。 例如,今年第一个星期日是1/3。所以,它需要在1/1或2天后行动。

 @WEEK = DATEPART(WEEK,DATEADD(DAY,-2,@CurrentDate))

这只适用于今年。理想情况下,您需要创建一个日期表,其中包含所有年份的适当计算周数(如果我有时间,我会这样做)