Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Запрос получение списка  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Добрый день
Подскажите пожалуйста, в чем ошибаюсь..
Имеются две таблицы - платежи и сотрудники
Нужно выгружать список адресов сотрудников, по которым на определенную дату отсутствовали платежи (записи в таблице платежей)
Обратная процедура выполняется (при p.id_payment is not null) и в результате формируется список сотрудников, по которым были платежи.
Но как прописать этот пункт в запросе, чтобы выгружать тех сотр, по ком не было записей?


use SAO_oper
declare @date date= '20140519'
declare @lb1 nvarchar(50) = N'300002' -- AC

select e.email from employee e left join payment p on p.id_emp=e.id_emp 
where p.id_payment is null  and p.payment_date=@date and p.id_lb=@lb1
order by e.email
21 май 14, 17:51    [16050722]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
Glory
Member

Откуда:
Сообщений: 104751
select e.email from employee e 
left join payment p on p.id_emp=e.id_emp and p.payment_date=@date and p.id_lb=@lb1
where p.id_payment is null  
order by e.email
21 май 14, 17:54    [16050739]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory, Спасибо Большое
21 май 14, 18:03    [16050781]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
досмотрел, не срабатывает условие
and p.id_lb=@lb1

при чем для обратного запроса (p.id_payment is not null) это условие выполняется правильно.
Пробывал комбинировать скобки, пока без результата
21 май 14, 18:59    [16050935]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
googlogmob
=@lb1
Чему равно @lb1?
22 май 14, 10:01    [16052694]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
declare @lb1 nvarchar(50) = N'300002'

К сообщению приложен файл. Размер - 20Kb
22 май 14, 10:13    [16052764]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
googlogmob
declare @lb1 nvarchar(50) = N'300002'

Картинка с другого сайта.
Почему же условие не срабатывает, если в колонке id_lb 300002?
Как оно, по-Вашему, должно срабатывать?
22 май 14, 10:27    [16052856]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
iap
googlogmob
declare @lb1 nvarchar(50) = N'300002'

Картинка с другого сайта.
Почему же условие не срабатывает, если в колонке id_lb 300002?
Как оно, по-Вашему, должно срабатывать?


по задумке, @lb должен отобрать только "должников" - сотрудников, по которым нет данных на указанную дату, только по значению '300002'
22 май 14, 12:54    [16054230]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
@lb должен отобрать только "должников" - сотрудников, по которым нет данных на указанную дату, только по значению '300002'

И разве в выборке есть записи, в которых есть значения отличные от '300002' ?
22 май 14, 12:55    [16054242]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
googlogmob
@lb должен отобрать только "должников" - сотрудников, по которым нет данных на указанную дату, только по значению '300002'

И разве в выборке есть записи, в которых есть значения отличные от '300002' ?


Наверное нужно было прикрепить схему к первому посту
По задаче: нужно выгрузитьь адреса "должников" - сотрудников, которые не предоставили данные на определенную дату (@date).
И по определенному параметру payment.id_lb (он присваивается @lb)
Возможно, в запрос нужно включить также другие таблицы..

К сообщению приложен файл. Размер - 42Kb
22 май 14, 14:51    [16055472]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
По задаче: нужно выгрузитьь адреса "должников" - сотрудников, которые не предоставили данные на определенную дату (@date).
И по определенному параметру payment.id_lb (он присваивается @lb)

Запрос вам это и выбрал
В чем притензии то ?
22 май 14, 14:52    [16055484]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
googlogmob
По задаче: нужно выгрузитьь адреса "должников" - сотрудников, которые не предоставили данные на определенную дату (@date).
И по определенному параметру payment.id_lb (он присваивается @lb)

Запрос вам это и выбрал
В чем притензии то ?


запрос выгрузил список всех сотрудников, по которым не было записей в таблице PAYMENT на указанную в @date дату,
Но не отфильтровал тех сотрудников, которые подпалают под @lb1 = N'300002'
Я так понимаю, нужно будет добавить связь employee<->cp, и проверять @LB по cp.id_lb, а не по payment.id_lb
22 май 14, 15:00    [16055561]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
Но не отфильтровал тех сотрудников, которые подпалают под @lb1 = N'300002'

И где в показанном результате хоть одна запись с @lb1 отличным от N'300002' ?
22 май 14, 15:01    [16055570]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Glory
googlogmob
Но не отфильтровал тех сотрудников, которые подпалают под @lb1 = N'300002'

И где в показанном результате хоть одна запись с @lb1 отличным от N'300002' ?


я прикрепил не результат, а список тестовых значений в таблице PAYMENT
22 май 14, 15:25    [16055781]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
Glory
Member

Откуда:
Сообщений: 104751
googlogmob
я прикрепил не результат, а список тестовых значений в таблице PAYMENT

И поэтому все должны поверить на слово, что "не срабатывает условие and p.id_lb=@lb1" ???
22 май 14, 15:26    [16055799]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
googlogmob
Я так понимаю, нужно будет добавить связь employee<->cp, и проверять @LB по cp.id_lb, а не по payment.id_lb

Да, Вы правильно понимаете.
22 май 14, 15:28    [16055813]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
Правильный результат выдал запрос:

use SAO_oper
declare @date date= '20140519'
declare @lb1 nvarchar(50) = N'300002' -- AC

select e.email from employee e 
left join payment p on p.id_emp=e.id_emp and p.payment_date=@date
inner join cp c on e.id_emp=c.id_emp and c.id_lb=@lb1
where  p.id_payment is  null  
order by e.email


Glory, Кот Матроскин, Спасибо за помощь
22 май 14, 15:38    [16055905]     Ответить | Цитировать Сообщить модератору
 Re: Запрос получение списка  [new]
googlogmob
Member

Откуда: Украина, Киев-Одесса
Сообщений: 182
От реализации базы данных на sql по ряду причин пришлось отказаться.
Создана БД в Access (2010), которая прилинкована к SQL Server

Имеется запрос, который должен выгружать список адресов сотрудников, которые не предоставили данные (в таблице платежей отсутствует id записи по их подразделению на заданую дату
Как раз последнее условие и не обрабатывается запросом (условие "and p.[Дата]=@date2" не влияет на результат запроса)
Каким образом нужно подправить запрос?

declare @date1 date= '20140604' 
declare @lb5 int = '5'  

select s.[email],Тема = '!! Оперативные данные за '+' '+convert(nvarchar(12),@date1, 104), Текст ='Отправьте, пожалуйста, данные' from  [Access_BD]...[Платежи_Агентская сеть] p
right join [Access_BD]...[ЦП]  c on p.[id_ЦП]=c.[Код]   and p.[Дата]=@date1
inner join [Access_BD]...[Сотрудники] s on c.[id_Сотрудник]=s.[Код] and c.[id_ЛБ] in ( @lb5)
where  p.[Код] is null 


От начального варианта темы отличается тем, что в таблице платежей отсутствует поле (id_Сотрудника)

К сообщению приложен файл. Размер - 42Kb
6 июн 14, 15:04    [16133078]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить