ceres
Дата: 04.11.2009 13:44:17
Помогите, что не так?
SELECT P.Дата, P.Код, P.КодТовара, P.Кол, P.Цена, (select sum([Кол]) from P as т1 where т1.Дата <= P.Дата and т1.[КодТовара] = P.[КодТовара]) AS Остаток FROM [SELECT Процессы.Дата, Операции.Код, Операции.КодТовара, Колво*выбор AS Кол, Операции.Цена
FROM Процессы INNER JOIN Операции ON Процессы.КодПроцесса = Операции.КодПроцесса
WHERE Процессы.Завершен=Yes AND Процессы.Процесс=1]. AS P;
Как красную часть переделать, а то пишет что ядро БД не может найти таблицу или запрос P.
Понятно, что можно сохранить запрос P... но ведь не охота базу засорять лишним.
И еще вопрос... что это за способ присвоения псевдонима []. AS P ?
Я его просто где-то скопировал и он работает, а есть еще вариант () P или () as P. Какая между ними разница?
nrg_fly
Дата: 05.11.2009 10:49:06
ceres,
разницы между "() P или () as P" никакой, с "as P" лучше читается алиас.
я бы в самом запросе
([SELECT Процессы.Дата, Операции.Код, Операции.КодТовара, Колво*выбор AS Кол, Операции.Цена
FROM Процессы INNER JOIN Операции ON Процессы.КодПроцесса = Операции.КодПроцесса
WHERE Процессы.Завершен=Yes AND Процессы.Процесс=1])
добавил нужным джойном таблицу с количество для расчета остатков.
ceres
Дата: 05.11.2009 22:39:03
Обождите!!
А вот этот исполняется!
SELECT P.*, (SELECT TOP 1 Себестоимость FROM [себестоимость] S
WHERE S.КодТовара=P.КодТовара AND S.ДатаИзмСС<=P.Дата
ORDER BY S.ДатаИзмСС DESC) AS ТекущаяСС
FROM [SELECT Операции.Код, Процессы.Дата, Операции.КодТовара, Операции.Колво, Операции.Цена
FROM Процессы INNER JOIN Операции ON Процессы.КодПроцесса=Операции.КодПроцесса
WHERE (((Операции.КодТовара)<>0) AND ((Процессы.Процесс)=1) AND ((Процессы.Выбор)=-1) AND ((Процессы.Завершен)=Yes))]. AS P;
Ну и в чем загвоздка? То что в первом пытается назначить псевдоним псевдониму?