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

あなたは、WHERE句でSELECT 参照して、それを派生フィールドを作成することはできません。

これに対処するいくつかのオプションがあります。ここでは、クエリに対する変更が最小限のものがあります。

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

関連する問題