Найти итоги за неделю, месяц за месяц из таблиц сервера SQL - PullRequest
0 голосов
/ 23 сентября 2019

enter image description here

Я пытаюсь получить общее количество заявок, поданных за текущий день (понедельник) - (последний понедельник), вторник - последняя неделя, вторник и т. Д.,Кроме того, я хотел бы получить заявления, сделанные на этот месяц (месяц до даты).Пожалуйста, помогите

Я использую SQL Server 2008 R2

Category    Date    Day     Applications
CASS    16/09/2019  Monday  1
CASS    16/09/2019  Monday  3
RBS     16/09/2019  Monday  1
RBS     16/09/2019  Monday  3
RBS     16/09/2019  Monday  14
RBS     16/09/2019  Monday  15
CASS    23/09/2019  Monday  2
CASS    23/09/2019  Monday  1
CASS    23/09/2019  Monday  2
CASS    23/09/2019  Monday  1
CASS    23/09/2019  Monday  8
RBS     23/09/2019  Monday  3
RBS     23/09/2019  Monday  3

Вывод:

               23/09/2019

CASS: 14 Предыдущая неделя: 14-4 = 10

RBS: 6 Предыдущая неделя: 6-33 = -27

Месяц до даты (Общее количество заявок до даты): 57

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Вы можете написать запрос так:

;with cte as (
select *, rown = ROW_NUMBER() over(partition by category order by [Date]) from (
    select category, [Date], sum(applications) appcnt from #table 
        group by category, [Date]
    ) t
)
Select  case when nextweek.Category is null then curweek.Category else 
 curweek.Category + ' Previous week' end , 
    case when nextweek.Category is not null then nextweek.appcnt - curweek.appcnt   else curweek.appcnt end
    from cte curweek 
  left join cte nextweek on curweek.rown = nextweek.rown -1
    and curweek.Category = nextweek.Category
union all
  select 'Month to date', sum(applications) from #table

код:

https://rextester.com/ABI84558

0 голосов
/ 23 сентября 2019

Используя функцию LEAD(), вы можете достичь того, что ищете, взгляните на следующий пример, вы можете настроить PARTITION BY предложение и подзапрос в соответствии с вашими требованиями:

ЗапросРезультат ..

SELECT  T.*, 
        LEAD (AppCount) OVER (PARTITION BY cDay ORDER BY weekNum) as PrevAppCount,
        T.AppCount - LEAD (AppCount) OVER (PARTITION BY cDay ORDER BY weekNum) 
FROM    (
        select  Category, 
                datepart(week,cDate) as weekNum,
                cDay,
                sum (AppCount) as AppCount
        from MyTable
        Group by Category, Datepart(week,cDate),cDay
        ) AS T


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...