Показать сообщение отдельно
Старый 10.01.2008, 13:47   #5  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
Что если перестроить запрос так:

while select [fields] from inventTable
where inventTable.ItemType != .....

join [fields] from inventTrans
where inventTrans.ItemId == inventTable.ItemId &&
((inventTrans.TransType == InventTransType::Purch) || (inventTrans.TransType == InventTransType::Sales))
&& (includeEstimated || ( ! includeEstimated &&
((inventTrans.StatusReceipt == StatusReceipt::None && inventTrans.StatusIssue == StatusIssue::Sold) ||
(inventTrans.StatusReceipt == StatusReceipt::Purchased && inventTrans.StatusIssue == StatusIssue::None))))
&& (inventTrans.DateFinancial
&& inventTrans.DateFinancial >= dateFrom && inventTrans.DateFinancial <= dateTo) ||
(!inventTrans.DateFinancial
&& inventTrans.DateExpected >= dateFrom && inventTrans.DateExpected <= dateTo))

join [fields] from inventDim
where inventDim.InventDimId == inventTrans.InventDimId
&& (.........)

exists join [fields] from A
where A.[X] == inventDim.[Y]

join B
where B.InventDimId == A.InventDimId
&& ((B.DateFinancial && B.DateFinancial >= dateFrom
&& B.DateFinancial <= dateTo) ||
( !B.DateFinancial && B.DateExpected >= dateFrom && B.DateExpected <= dateTo))

Есть мысль, что это сократит "терзания" InventTrans (+InventDim) и будет быстрее...