Ссылка в запросе на подчиненный запрос

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. Какая между ними разница?
Cheerful Calf
Дата: 05.11.2009 09:56:09
вроде никак. не понимает он альясов вложенных запросов.
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:21:58
nrg_fly
ceres,

разницы между "() P или () as P" никакой, с "as P" лучше читается алиас.

я бы в самом запросе

([SELECT Процессы.Дата, Операции.Код, Операции.КодТовара, Колво*выбор AS Кол, Операции.Цена
FROM Процессы INNER JOIN Операции ON Процессы.КодПроцесса = Операции.КодПроцесса
WHERE Процессы.Завершен=Yes AND Процессы.Процесс=1])

добавил нужным джойном таблицу с количество для расчета остатков.


Так этот запрос это и делает - рассчитывает текущие остатки на дату, на основании этих двух таблиц.. какую еще таблицу Вы мне предлагаете добавить? не понял.
ceres
Дата: 05.11.2009 22:23:19
Cheerful Calf
вроде никак. не понимает он альясов вложенных запросов.


Абидна, да!? :о) Ладно.. сохраним запрос P отдельно.
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;

Ну и в чем загвоздка? То что в первом пытается назначить псевдоним псевдониму?
qwrqwr_
Дата: 05.11.2009 23:43:47
ceres
Обождите!!
А вот этот исполняется!
ну этот будет исполняться пока подзапрос по имени ТекущаяСС будет возвращать строго 1 запись - а потом перестанет в самом неожиданном месте (когда ДатаИзмСС станет неуникальной).
ceres
Ну и в чем загвоздка? То что в первом пытается назначить псевдоним псевдониму?
Ну да, именно в этом. Я что-то не встречал пока такой синтаксис ...FROM алияс AS новый_алияс
PS используйте, пожалуйста, теги для форматирования кода.