Текущий итог в Microsoft SSMS

#sql #sql-server

#sql #sql-сервер

Вопрос:

Как получить текущий итог в SSMS?

 select E.Employee,E.Month,E.Year,E.Salary,
SUM(E.Salary) over (partition by E.Year order by E.Employee) as Cum_Sal
from Employees E
group by E.Employee,E.Month,E.Year,E.Salary
order by E.Year
  

Требуется вывод:

введите описание изображения здесь

Комментарии:

1. Почему это помечено tcl?

Ответ №1:

Попробуйте это:

 select E.Employee
      ,E.Month
      ,E.Year
      ,E.Salary
      ,SUM(E.Salary) OVER 
      (
            partition by E.Year 
            order by CASE E.Month
                          WHEN 'Jan' THEN 1
                          WHEN 'Feb' THEN 2
                          WHEN 'Mar' THEN 3
                          WHEN 'Apr' THEN 4
                          WHEN 'May' THEN 5
                          WHEN 'Jun' THEN 6
                          WHEN 'Jul' THEN 7
                          WHEN 'Aug' THEN 8
                          WHEN 'Sep' THEN 9
                          WHEN 'Oct' THEN 10
                          WHEN 'Nov' THEN 11
                          WHEN 'Dec' THEN 12
                      END
      ) as Cum_Sal
from Employees E
order by E.Year
  

Ответ №2:

SQL Server имеет довольно гибкие методы преобразования в дату. И ваша основная проблема заключается в том, что строки не имеют удобного порядка — даты хранятся как названия месяцев.

Но вы можете легко преобразовать в дату и использовать ее для упорядочения:

 select e.*,  -- or whatever columns you want
       sum(e.Salary) over (partition by e.employee, e.Year
                           order by convert(date, '2000 '   e.month)
                          ) as cumulative_salary
from Employees e
order by e.employee, e.Year;
  

Для этого запроса агрегирование не требуется.

Другой удобный метод использует charindex() :

        sum(e.Salary) over (partition by e.employee, e.Year
                           order by charindex(month, 'jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec')
                          ) as cumulative_salary
  

Комментарии:

1. отличная помощь с запросом