Оптимизировал самый первый запрос - там мне надо было получить дни в наличии на складе и конечный остаток. В итоге:
ТекстЗапроса = "
|Select
| Выборка.Номенклатура [Номенклатура $Справочник.Номенклатура]
| , (Case When (IsNull(Выборка.ДнейНаСкладе,0) = 0) And (IsNull(Sum(ОстаткиТМЦОстатки.КоличествоОстаток),0) <> 0) Then
| DATEDIFF(day, :НачДата, :КонДата) + 1
| Else
| IsNull(Выборка.ДнейНаСкладе,0)
| End) As Дней
|, Sum(ОстаткиТМЦОстатки.КоличествоОстаток) Остаток
|From
| (SELECT
| ВлЗапрос.Номенклатура Номенклатура
| , SUM(
| CASE WHEN ВлЗапрос.КоличествоНачОст>0 THEN
| CASE WHEN ВлЗапрос.Период=convert(datetime,:НачДата,112) THEN
| CASE WHEN ВлЗапрос.КоличествоКонОст<=0 THEN
| 1
| ELSE
| DATEDIFF(day, ВлЗапрос.Период,convert(datetime,:КонДата,112)) + 1
| END
| ELSE
| CASE WHEN ВлЗапрос.КоличествоКонОст<=0 THEN
| -DATEDIFF(day, ВлЗапрос.Период,convert(datetime,:КонДата,112))
| END
| END
| ELSE
| CASE WHEN ВлЗапрос.КоличествоКонОст>0 THEN
| DATEDIFF(day, ВлЗапрос.Период,convert(datetime,:КонДата,112)) + 1
| END
| END) as ДнейНаСкладе
|FROM(
| SELECT ОстаткиТМЦОстаткиОбороты.Номенклатура
| , ОстаткиТМЦОстаткиОбороты.Период as Период
| , ОстаткиТМЦОстаткиОбороты.КоличествоКонечныйОстаток КоличествоКонОст
| , ОстаткиТМЦОстаткиОбороты.КоличествоНачальныйОстаток КоличествоНачОст
| FROM да,
| ,
| -- (Номенклатура = :ВыбНоменклатура)
| (Номенклатура in (select val from #СписокНоменклатуры))
| And (Склад = :ВыбСклад)
| ,(Номенклатура),) AS ОстаткиТМЦОстаткиОбороты
| ) AS ВлЗапрос
| GROUP BY ВлЗапрос.Номенклатура
|-- ORDER BY ВлЗапрос.Номенклатура
| ) As Выборка
| Inner Join $РегистрОстатки.ОстаткиТМЦ(:КонДата~,,
| (Номенклатура in (select val from #СписокНоменклатуры)) And (Склад = :ВыбСклад),
| (Номенклатура),) AS ОстаткиТМЦОстатки On ОстаткиТМЦОстатки.Номенклатура = Выборка.Номенклатура
|Group By Выборка.Номенклатура, Выборка.ДнейНаСкладе
|";
.
Без обработки таблицы на клиенте скорость возросла с 2-3 минут по 6 000 позиций до 20 секунд.
Было решено отказаться от учета фактов продаж в итоге запрос по продажам стал выглядеть:
Текстзапроса = "-- qryMaker:Ост по дням.2010.05.18.17.29.05
|SELECT Продажи.Номенклатура [Номенклатура $Справочник.Номенклатура]
| , Sum(Продажи.КоличествоОборот - Продажи.КоличествоВОборот) Продажа
|FROM $РегистрОбороты.Продажи(:НачДата, :КонДата~,,,
| (Номенклатура in (Select val from #СписокНоменклатуры))
| AND (Склад = :ВыбСклад),
| Номенклатура,) As Продажи
|GROUP BY Продажи.Номенклатура
|";
Не помогло - так же занимаются все ресурсы сервера. Копаю дальше...