Неправильное использование подзапросов (Oracle SQL) - PullRequest
0 голосов
/ 04 апреля 2020

Я пытаюсь обернуть голову вокруг подзапросов, и по большей части добился успеха в разных контекстах. Это, однако, поставило меня в тупик.

У меня есть таблица с расписанием, в которой указаны обычные и сверхурочные часы, отработанные в течение двух периодов оплаты. Он разделяет идентификационный ключ сотрудника с таблицей моих сотрудников.

Я пытаюсь проверить, кто проработал более 80 часов между двумя периодами оплаты, а затем отобразить свое имя + размер выплаты.

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

SELECT Employee.Lastname, Job.Payrate * 1.05 "Increased"
FROM Employee JOIN Job
ON Employee.Jobcode = Job.Jobcode
WHERE EmpID IN (SELECT SUM(Reghours + Otimehours) FROM Timesheet GROUP BY EmpID);

Может кто-нибудь сказать мне, где я иду не так? Если нужно больше контекста, пожалуйста, дайте мне знать.

Это для моей предыдущей проблемы, в которой я искал только> 40 часов, отработанных за один период оплаты. Я попытался отредактировать этот, чтобы он работал, но я думаю, что пропускаю что-то простое.

SELECT Employee.Lastname, ROUND(Job.Payrate * 1.05, 2) "Increased"
FROM Employee JOIN Job
ON Employee.Jobcode = Job.Jobcode
WHERE EmpID IN (SELECT EmpID FROM Timesheet WHERE Payweekenddate = '30-MAY-03' AND Reghours + Otimehours > 40);

1 Ответ

0 голосов
/ 04 апреля 2020

Вам не хватает проверить EMPID в подзапросе -

SELECT Employee.Lastname, Job.Payrate * 1.05 "Increased"
FROM Employee JOIN Job
ON Employee.Jobcode = Job.Jobcode
WHERE EmpID IN (SELECT EmpID 
                FROM Timesheet
                GROUP BY EmpID
                HAVING SUM(Reghours + Otimehours) >= 80 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...