2012-02-14 78 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