Запрос при о тладке
Set NoCount On
IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE
ID=OBJECT_ID('tempdb..#ВремОстатки') AND sysstat & 0xf = 3 )
DROP TABLE #ВремОстатки
SELECT ОстаткиТМЦ.Период as Период
, ОстаткиТМЦ.Фирма as Фирма
, ОстаткиТМЦ.Склад as Склад
, ОстаткиТМЦ.Номенклатура AS Номенклатура
, ОстаткиТМЦ.КоличествоКонечныйОстаток as Остаток
Into #ВремОстатки
From #TBFD6C5782E2D48D2A038A9C21BA3F180 as ОстаткиТМЦ
SELECT ПартииНаличие.Период as Период
, ПартииНаличие.Фирма [Фирма $Справочник.Фирмы]
, ПартииНаличие.Склад [Склад $Справочник.Склады]
, ПартииНаличие.Номенклатура [Номенклатура $Справочник.Номенклатура]
, Sum(ПартииНаличие.Остаток) as Остаток
FROM (
SELECT CASE WHEN Рег.Период<'20130501' THEN '20130501' ELSE Рег.Период END as Период
, Рег.Фирма as Фирма
, Рег.Склад as Склад
, Рег.Номенклатура
, Рег.Остаток as Остаток
FROM (
SELECT кросс.день as Период
, кросс.Фирма as Фирма
, кросс.Склад as Склад
, кросс.Номенклатура AS Номенклатура
, Ост.Остаток AS Остаток
From (Select DISTINCT дни.день
, Остатки.Фирма as Фирма
, Остатки.Склад as Склад
, Остатки.Номенклатура AS Номенклатура
From (
select dateadd(day,(a.number+b.number*256),CAST('20130501' as DateTime)) as день
from master..spt_values a, master..spt_values b
where a.type='P' and b.type='P'
and b.number<=datediff(day,CAST('20130501' as DateTime),CAST('20130514' as DateTime))/256
and a.number<=(datediff(day,CAST('20130501' as DateTime),CAST('20130514' as DateTime))-b.number*256)
) as дни
CROSS JOIN #ВремОстатки as Остатки
) as Кросс
LEFT JOIN (Select об1.Период as ДатаС
, MIN(CASE WHEN об2.Период Is NULL THEN DATEADD(day,1,CAST('20130514' as DateTime)) ELSE DATEADD(day,-1,об2.Период) END) as ДатаПо
, об1.Остаток as Остаток
, об1.Фирма as Фирма
, об1.Склад as Склад
, об1.Номенклатура
From #ВремОстатки об1
LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период
Group By об1.Период,об1.Остаток,об1.Фирма,об1.Склад,об1.Номенклатура
) as Ост on кросс.день BETWEEN Ост.ДатаС AND Ост.ДатаПо AND кросс.Фирма = Ост.Фирма AND кросс.Склад = Ост.Склад AND кросс.Номенклатура = Ост.Номенклатура
Where Ост.Остаток <> 0
) as Рег
) as ПартииНаличие
GROUP BY клатура
ORDER BY 1
глРС.ВыполнитьИнструкцию(ТекстЗапроса,ИТЗ);
{D:\TEMP\АНАЛИЗ ТМЦ ПО ПЕРИОДАМ.ERT(420)}: State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'Фирма'.
ТекстЗапроса оригинал
Set NoCount On
IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE
ID=OBJECT_ID('tempdb..#ВремОстатки') AND sysstat & 0xf = 3 )
DROP TABLE #ВремОстатки
SELECT ОстаткиТМЦ.Период as Период
, ОстаткиТМЦ.Фирма as Фирма
, ОстаткиТМЦ.Склад as Склад
, ОстаткиТМЦ.Номенклатура AS Номенклатура
, ОстаткиТМЦ.КоличествоКонечныйОстаток as Остаток
Into #ВремОстатки
From $РегистрОстаткиОбороты.ОстаткиТМЦ('20130501','20130514Z',День,,,
(Номенклатура = ' 4VO '),(Фирма,Склад,Номенклатура),(Количество)) as ОстаткиТМЦ
SELECT ПартииНаличие.Период as Период
, ПартииНаличие.Фирма [Фирма $Справочник.Фирмы]
, ПартииНаличие.Склад [Склад $Справочник.Склады]
, ПартииНаличие.Номенклатура [Номенклатура $Справочник.Номенклатура]
, Sum(ПартииНаличие.Остаток) as Остаток
FROM (
SELECT CASE WHEN Рег.Период<'20130501' THEN '20130501' ELSE Рег.Период END as Период
, Рег.Фирма as Фирма
, Рег.Склад as Склад
, Рег.Номенклатура
, Рег.Остаток as Остаток
FROM (
SELECT кросс.день as Период
, кросс.Фирма as Фирма
, кросс.Склад as Склад
, кросс.Номенклатура AS Номенклатура
, Ост.Остаток AS Остаток
From (Select DISTINCT дни.день
, Остатки.Фирма as Фирма
, Остатки.Склад as Склад
, Остатки.Номенклатура AS Номенклатура
From (
select dateadd(day,(a.number+b.number*256),CAST('20130501' as DateTime)) as день
from master..spt_values a, master..spt_values b
where a.type='P' and b.type='P'
and b.number<=datediff(day,CAST('20130501' as DateTime),CAST('20130514' as DateTime))/256
and a.number<=(datediff(day,CAST('20130501' as DateTime),CAST('20130514' as DateTime))-b.number*256)
) as дни
CROSS JOIN #ВремОстатки as Остатки
) as Кросс
LEFT JOIN (Select об1.Период as ДатаС
, MIN(CASE WHEN об2.Период Is NULL THEN DATEADD(day,1,CAST('20130514' as DateTime)) ELSE DATEADD(day,-1,об2.Период) END) as ДатаПо
, об1.Остаток as Остаток
, об1.Фирма as Фирма
, об1.Склад as Склад
, об1.Номенклатура
From #ВремОстатки об1
LEFT JOIN #ВремОстатки об2 on об1.Период < об2.Период
Group By об1.Период,об1.Остаток,об1.Фирма,об1.Склад,об1.Номенклатура
) as Ост on кросс.день BETWEEN Ост.ДатаС AND Ост.ДатаПо AND кросс.Фирма = Ост.Фирма AND кросс.Склад = Ост.Склад AND кросс.Номенклатура = Ост.Номенклатура
Where Ост.Остаток <> 0
) as Рег
) as ПартииНаличие
GROUP BY клатура
ORDER BY 1