SQL запрос для разных типов сотрудников - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть запрос, который в настоящее время рассчитывает сумму чистого номинала, валового заработка и валового вычета ежемесячно, но теперь я хочу запрос, который рассчитывает те же свойства, но на основе разных типов сотрудников, мое веб-приложение в настоящее времяиспользуя нижеупомянутый тип работника

EMP_TYPE  EMP_TYPE_NAME 
01        Regular Employee
04        Deputated In Employee
06        Contractual Employee
03        Outsource Employees
05        Regular Employee-MPSIDC

Теперь у меня есть еще одна таблица i, e EMPLOYEE_SALARY_SUMMARY, которая содержит все необходимые данные относительно зарплаты i, e NET_PAY, GROSS_EARNING, GROSS_DEDUCTION.

До сих пор у меня есть данные на ежемесячной основе, например,

December, 2018, 
total Net_Pay is 2 cr, 
total gross Earn 2.5 cr, 
total gross_deduct is 50lacs 

Но теперь мне также нужны данные от имени Типа сотрудника, пример: декабрь 2018

Regular Employee Net_pay =50 lacs, Gross Earn= 75 lacs, gross Deduct=25 Lac
Deputed-In Employee  Net_pay =50 lacs, Gross Earn= 75 lacs, gross Deduct=25 Lac
Contractual  Employee  Net_pay =50 lacs, Gross Earn= 75 lacs, gross Deduct=25 Lac

Я написал это, но я не получил ожидаемый результат, сейчас я использую дело только для штатного сотрудника, т. Е. Emp_TYPE= 1

select
count(distinct ess.EMPLOYEE_ID)emp_count,
SUM(case when et.EMP_TYPE_ID = 1 then ess.NET_SALARY else 0 end )net_sal,
SUM(case when et.EMP_TYPE_ID = 1 then ess.GROSS_EARNING else 0 end )gross_earn,
SUM(case when et.EMP_TYPE_ID = 1 then ess.GROSS_DEDUCTION else 0 end )gross_deduct
from 
employee_salary_summary ess
JOIN employee e
on e.EMP_ID=ess.EMPLOYEE_ID
JOIN EMPLOYEE_TYPE et
ON et.EMP_TYPE_ID=e.EMP_TYPE_ID 
group by ess.NET_SALARY, ess.GROSS_EARNING, ess.GROSS_DEDUCTION;

Также предложите мне эффективныйспособ написать тот же запрос, так что он никогда не завершится неудачей в любом случае.

Текущий вывод:

emp_count net_pay gross_earn gross_deduct
    1    26862    30643         3781
    1    37229    42361         5132
    1    66304    75222         8918
    1    19124    22300         3176
    2    93144    105840        12696
    4    93176    106444        13268
    1    0         0              0
    1    38434    43722         5288
    1    0         0              0
    2    81996    93240         11244

Он также выбирает другие типы сотрудников, как вы можете видеть в выводе, Emp_Typeне ограничено 1, квery также выбирает другие типы employee_typ, такие как 2 и 4.

Ожидаемый результат должен быть

emp_count Employee type    net_pay      gross_earn     gross_deduct
  51       Regular Emp     15,00000     17,000000        2,00000
  26       Deputed-In       8,00000       1,00000        7,00000
  29       contractual emp  6,00000       2,00000        4,00000  

1 Ответ

0 голосов
/ 05 декабря 2018

Для отображения данных по типу сотрудника необходимо включить EMP_TYPE_NAME в проекцию запроса.Чтобы получить правильные итоговые значения, необходимо сгруппировать столбцы BY, которые вы не агрегируете.

Вы не включили никаких подсказок о том, как рассчитать месяц оплаты, поэтому я пропустил его, но вы можете захотетьдобавьте его в предложение WHERE (или, возможно, в проекцию, но это не входит в ожидаемый результат):

select
    et.EMP_TYPE_NAME
    count(distinct ess.EMPLOYEE_ID)emp_count,
    SUM(ess.NET_SALARY) net_sal,
    SUM(ess.GROSS_EARNING)gross_earn,
    SUM(ess.GROSS_DEDUCTION)gross_deduct
from 
employee_salary_summary ess
JOIN employee e
on e.EMP_ID=ess.EMPLOYEE_ID
JOIN EMPLOYEE_TYPE et
ON et.EMP_TYPE_ID=e.EMP_TYPE_ID 
/* where ess.pay_month = '2018-DEC' ??? */
group by et.EMP_TYPE_NAME
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...