Как получить среднюю зарплату в SQL столбце HourlyPayRate? - PullRequest
1 голос
/ 09 мая 2019

Я работаю над созданием отчета SSRS и хочу получить среднее значение столбца HourlyPayRate, которое у меня есть (в моем выписке по делу). Я самостоятельно изучаю SQL, и мне было интересно, как я могу получить AVG HourlyPayRate в новой таблице (если возможно).

DECLARE @PROCLEVEL varchar(6),
                   @HRYEAR varchar(5),
                           @HRPERIOD varchar(15)
SET @PROCLEVEL = 'XXX'
SET @HRYEAR = '2019'
SET @HRPERIOD = '03'
SELECT CASE
           WHEN HRPERIOD = 3 THEN 'March'
           WHEN HRPERIOD = 6 THEN 'June'
           WHEN HRPERIOD = 9 THEN 'September'
           WHEN HRPERIOD = 12 THEN 'DECEMBER'
       END HRPERIOD,
       EMPLOYEE,
       HRYEAR,
       PAY_RATE,
       FTE_TOTAL,
       JOB_CLASS_NAME,
       JOB_CLASS,
       SALARY_CLASS,
       CASE
           WHEN SALARY_CLASS = 'S'
                OR PAY_RATE > 1000 THEN (PAY_RATE / 2080)
           ELSE PAY_RATE
       END AS HourlyPayRate
FROM [LAWSONDWHR].[dbo].[RPT_EMPLOYEECENSUS_ASOF]
WHERE PROCESS_LEVEL = @PROCLEVEL
  AND HRYEAR = @HRYEAR
  AND HRPERIOD = @HRPERIOD
  AND JOB_CLASS = 'RN'
  AND FTE_TOTAL != 0
  AND MASTER_EMP_STATUS NOT IN ('ZZ',
                                'T1')
ORDER BY PAY_RATE

Что я делаю, так это то, когда класс зарплаты сотрудника равен S для зарплаты или если ставка заработной платы превышает 1000, тогда возьмите ставку заработной платы / 2080 количество часов в году.

Ответы [ 3 ]

1 голос
/ 09 мая 2019

Если вы хотите получить среднюю почасовую оплату за каждого сотрудника, вы можете использовать GROUP BY.

SELECT Employee, AVG(HourlyPayRate) AS AvgHourlyRate
FROM (
    { your query }
) a
GROUP BY Employee
0 голосов
/ 09 мая 2019

Не могли бы вы просто сделать это?Я удалил ваши переменные и предложение where, но вы можете настроить его при необходимости:

Select Employee, AVG(HourlyPayRate)
from (
SELECT CASE
       WHEN HRPERIOD = 3 THEN 'March'
       WHEN HRPERIOD = 6 THEN 'June'
       WHEN HRPERIOD = 9 THEN 'September'
       WHEN HRPERIOD = 12 THEN 'DECEMBER'
   END HRPERIOD,
   EMPLOYEE,
   HRYEAR,
   PAY_RATE,
   FTE_TOTAL,
   JOB_CLASS_NAME,
   JOB_CLASS,
   SALARY_CLASS,
   CASE
       WHEN SALARY_CLASS = 'S'
            OR PAY_RATE > 1000 THEN (PAY_RATE / 2080)
       ELSE PAY_RATE
   END AS HourlyPayRate
FROM [LAWSONDWHR].[dbo].[RPT_EMPLOYEECENSUS_ASOF]
)
GROUP BY Employee
0 голосов
/ 09 мая 2019

Не полное решение, но если вы используете TSQL (SQL Server), и вы готовы работать с предположением, что все сотрудники работают одинаковое количество часов в году (что обычно неверно кстати), вы можете просто обернуть HourlyPayRate в функцию AVG () ...

...