2016-12-14 2 views
-1

У меня есть таблица таблиц сотрудников и таблицы таблиц двух таблиц.Как выбрать записи из одной таблицы в другой таблице

сотрудников Структура таблицы:

+------------+---------+ 
| emp_number | empname | 
+------------+---------+ 
|   2 | Jagdish | 
|   3 | Sulata | 
|   4 | Prasad | 
|   5 | Vijay | 
|   6 | Armin | 
+------------+---------+ 

И Timesheet Структура таблицы:

+------------+--------+------------+------------+ 
| emp_number | status | startDate | EndDate | 
+------------+--------+------------+------------+ 
|   2 | 0  | 2016-01-01 | 2016-01-07 | 
|   3 | 1  | 2016-02-01 | 2016-02-06 | 
|   4 | 40  | 2016-01-01 | 2016-01-07 | 
|   9 | 0  | 2016-01-06 | 2016-01-12 | 
|   10 | 4  | 2016-01-01 | 2016-01-08 | 
+------------+--------+------------+------------+ 

Можно ли написать запрос для выборки записей для всех сотрудников, использующих группу по неделям?
Пожалуйста, направляйте меня на это. Спасибо.

+0

Пожалуйста, поделитесь ожидаемым выходом – Wanderer

+0

Вы можете объединить две таблицы по столбцу emp_number с помощью LEFT JOIN. В где предложение, если вы выберете emp_number, равно NULL, вы получите недостающие строки. – Eralper

+0

Я удалил все те теги dbms. Не стесняйтесь добавлять один из них назад. – jarlh

ответ

0
SELECT * FROM Employee Table 
WHERE NOT EXISTS(SELECT 1 FROM Timesheet WHERE Employee.emp_number = Timesheet 
.emp_number AND Status IN (0,40)) 
0

попытка ниже кода в соответствии с вашим данным вопросом

select employee.* 
from employee 
where employee.emp_number not in (select emp_number from timesheet) 
and timesheet.status in (0,40) and timesheet.enddate between '2016-01-01' 
and '2016-01-07' 
0

Я считаю, что это правильный код:

SELECT * 
FROM Timesheet INNER JOIN Employee ON Timesheet.emp_number=Employee.emp_number 
WHERE (Employee.status = 0 OR Employee.status = 40) 
    AND (Timesheet.startDate = '2016-01-01' AND Timesheet.EndDate = '2016-01-07') 

Вы, возможно, потребуется изменить даты между точкой с запятой в зависимости по каким типам startDate и EndDate,

Например: '2016-01-01 00:00:00'

+0

Нет, его не работает. Я думаю, что левое соединение будет работать вместо внутреннего соединения. Но я не получаю, где добавить дополнительный статус и условия даты. – Madhura

0

- попробуйте этот код. Это быстрее

WITH cte_timesheet AS (
    select employee_id, 
     MAX(CASE WHEN status IN (0,40) THEN 1 ELSE 0 END) include_status 
    from em_timesheet 
    where start_date = '2016-12-05' 
     AND end_date = '2016-12-11' 
    GROUP BY employee_id 
) 
SELECT emp_number, 
     empname 
    FROM em_employee e 
    LEFT JOIN cte_timesheet t ON t.employee_id = e.emp_number 
    WHERE t.employee_id IS NULL 
    OR t.include_status = 1 
0

Попробуйте это ниже code.its очень простого

select * from #emp E 
LEFT JOIN #TimeSheet T ON t.emp_nbr=e.emp_nbr 
where startdate>='2016-01-01' and enddate<='2016-01-07' 
and status_ in(0,40) 
Смежные вопросы