2012-02-14 7 views
1

Мне нужно использовать значение, полученное из SEATS_RESERVED, таким образом. В приведенном ниже запросе мне присваивается недопустимое имя столбца «SEATS_RESERVED».Использовать столбец, определенный из подзапроса в запросе

SELECT *, 
SEATS_RESERVED = 
(SELECT COUNT(UID) 
FROM person WHERE person.RES_DATE = reservation_dates.RES_DATE 
AND person.ARCHIVE = 'FALSE') 
FROM reservation_dates 
WHERE TERM = ? 
AND SEATS_RESERVED < MAX_SEATS; 
+0

если SEATS_RESERVED переменная объявить его with' @ '. например: @SEATS_RESERVED – Scorpion

ответ

4

Вы не можете создать производный поле в SELECT, и ссылаться на него в предложении WHERE.

Существует несколько вариантов решения этой проблемы, здесь приведено минимальное изменение вашего запроса.

SELECT * FROM 
(
    SELECT *, 
    SEATS_RESERVED = 
    (SELECT COUNT(UID) 
    FROM person WHERE person.RES_DATE = reservation_dates.RES_DATE 
    AND person.ARCHIVE = 'FALSE') 
    FROM reservation_dates 
    WHERE TERM = ? 
) 
    AS data 
WHERE SEATS_RESERVED < MAX_SEATS; 
-1

Вы пытаетесь установить SEATS_RESERVED равное значение в вашем подзапрос, но вы не объявили SEATS_RESERVED еще. Кроме того, где определяется MAX_SEATS?

Как об этом:

DECLARE @MAX_SEATS INT 
SET @MAX_SEATS = <some integer> 


SELECT *, 
    (SELECT COUNT(UID) FROM person WHERE person.RES_DATE = reservation_dates.RES_DATE 
AND person.ARCHIVE = 'FALSE' HAVING COUNT(UID) < @MAX_SEATS;) AS SEATS_RESERVED 
FROM reservation_dates 
WHERE TERM = ? 
+0

Это не переменная. Это альтернативный syntaxt для 'SELECT *, (sub-query) AS SEATS_RESERVED FROM ...'. И похоже, что 'MAX_SEATS' является полем в таблице' reservation_dates'. – MatBailie

Смежные вопросы