Помогите составить запрос.

olzhas
Дата: 05.09.2005 09:20:00
Есть таблица хранящая предачу оборудования от одного сотрудника к другому.
(КодДок, ОтКого, кому, дата). К КодДок привязывается вторая таблица со списком оборудования, всязь один ко многим(КодДок, КодОборудования). Тем самым получается документ первая таблица это шапка, вторая это табличная часть. В запросе необходимо получить список оборудования который принадлежит сотруднику на определенную дату. Заранее Благодарен.
Пользователь2
Дата: 05.09.2005 10:17:58
SELECT Передача.ОтКого, Передача.дата, Оборудования.Оборудование
FROM Передача INNER JOIN Оборудования ON Передача.КодДок = Оборудования.КодДок
WHERE (((Передача.ОтКого)="Иванов") AND ((Передача.дата)=#9/5/2005#));
1
Дата: 05.09.2005 10:25:15
olzhas
принадлежит сотруднику на определенную дату

- это что значит? На указанную дату есть документы о приходе оборудования к сотруднику и нет документов об уходе, или как?
olzhas
Дата: 05.09.2005 10:36:17
1
olzhas
принадлежит сотруднику на определенную дату

- это что значит? На указанную дату есть документы о приходе оборудования к сотруднику и нет документов об уходе, или как?

На указанную дату необходимо посчитать из предыдущих документов. По одному документу Иванову на 1-ое число дали мышь и клаву. По второму документу на 2-ое число Иванов отдал Петрову мышь. Соответсвено запрос на первое число возвратит мышь и клаву, а на второе только клаву.
olzhas
Дата: 05.09.2005 10:37:24
Пользователь2
SELECT Передача.ОтКого, Передача.дата, Оборудования.Оборудование
FROM Передача INNER JOIN Оборудования ON Передача.КодДок = Оборудования.КодДок
WHERE (((Передача.ОтКого)="Иванов") AND ((Передача.дата)=#9/5/2005#));

Он покажет только один документ(если он есть).
1
Дата: 05.09.2005 11:01:25
А количество оборудования всегда 1?
(c)VIG
Дата: 05.09.2005 11:25:29
select a.Кому,a.Оборудование
from
(SELECT Передача.Кому ,Передача.дата, Оборудования.Оборудование
FROM Передача INNER JOIN Оборудования ON Передача.КодДок = Оборудования.КодДок
) a 
left join
(SELECT Передача.ОтКого, Передача.дата, Оборудования.Оборудование
FROM Передача INNER JOIN Оборудования ON Передача.КодДок = Оборудования.КодДок
) b on a.Кому=b.ОтКого and a.Оборудование=b.Оборудование
and a.дата <=b.data
where b.ОтКого is null
and a.дата <=#ОПРЕДЕЛЕННАЯ_ДАТА#
ы
Дата: 05.09.2005 11:40:34
т.е. есть 3 таблицы:
Шапка оборудование
КодДок
другие аттрибуты
...

Таблица оборудования
КодДок
КодОборудования
Количество (поле опущено, но, вероятно, подразумевается)
другие аттрибуты
...

движение
Дата
Откуда
КодДок
Куда

Если это так, то получается какой-нибудь классический "складской" набор запросов. Что нибудь вроде
select Кто, КодОборудования, Sum(Количество) from [Движение]
group by Кто, КодОборудования

, где [Движение]:
select [Куда], [КодОборудования], [Количество]
from (([движение]
inner join [Шапка оборудования] on [движение].[КодДок]=[Шапка оборудования].[КодДок])
inner join [Таблица оборудования] on [движение].[КодДок]=[Таблица оборудования].[КодДок])
where [Дата]<=#13/07/1979# and [Куда]=12345

union all

select [Откуда], [КодОборудования], -[Количество]
from (([движение]
inner join [Шапка оборудования] on [движение].[КодДок]=[Шапка оборудования].[КодДок])
inner join [Таблица оборудования] on [движение].[КодДок]=[Таблица оборудования].[КодДок])
where [Дата]<=#13/07/1979# and [Откуда]=12345


(не проверяя). Это отнюдь не лучший вариант организации базы. И подходящий запрос, только если я угадал про количество.
olzhas
Дата: 05.09.2005 12:35:12
ы
т.е. есть 3 таблицы:
Шапка оборудование
КодДок
другие аттрибуты
...

Таблица оборудования
КодДок
КодОборудования
Количество (поле опущено, но, вероятно, подразумевается)
другие аттрибуты
...

движение
Дата
Откуда
КодДок
Куда

Если это так, то получается какой-нибудь классический "складской" набор запросов. Что нибудь вроде
select Кто, КодОборудования, Sum(Количество) from [Движение]
group by Кто, КодОборудования

, где [Движение]:
select [Куда], [КодОборудования], [Количество]
from (([движение]
inner join [Шапка оборудования] on [движение].[КодДок]=[Шапка оборудования].[КодДок])
inner join [Таблица оборудования] on [движение].[КодДок]=[Таблица оборудования].[КодДок])
where [Дата]<=#13/07/1979# and [Куда]=12345

union all

select [Откуда], [КодОборудования], -[Количество]
from (([движение]
inner join [Шапка оборудования] on [движение].[КодДок]=[Шапка оборудования].[КодДок])
inner join [Таблица оборудования] on [движение].[КодДок]=[Таблица оборудования].[КодДок])
where [Дата]<=#13/07/1979# and [Откуда]=12345


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

Количества нет, вмсто него просто буду использовать count