2012-02-14 26 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 2012-02-14 15:10:33

回答

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

這不是一個變量。這是'SELECT *,(子查詢)AS SEATS_RESERVED FROM ...'的替代合成文本。看起來'MAX_SEATS'是'reservation_dates'表中的一個字段。 – MatBailie 2012-02-14 15:17:07