2012-03-16 33 views
0

我有以下查詢值:SQL服務器 - 域持有的子查詢

select p.ID, 
     Received = (select Rec 
        from Exp 
        where EstAmt = (select MAX(ex.EstAmt) 
              from Exp ex 
              where ex.Prot = p.ID 
              and EstAmt > 0) 
        ) 
From Prot 
where Received = 1 

在上面,收到的是我作爲一個別名,將得到的建議是什麼值創建一個字段。 Rec是表格中的一個字段。

但是,當我把收到的where子句我得到:無效的列名'收到'。如前所述,Received不是表中的字段,而是一個位置,它可以從子查詢中獲取值。任何想法,我怎麼可以收到where條款,因爲我需要只顯示結果,如果該值是1.

+0

U不能保留SELECT子句中的子查詢.... – Teja 2012-03-16 14:55:59

回答

0

您將不得不篩選原始查詢的結果,將其用作子查詢:

select * from 
(
    select p.ID, 
      Received = (select Rec from Exp 
         where EstAmt = (select MAX(ex.EstAmt) from Exp ex 
             where ex.Prot = p.ID and EstAmt > 0) 
        ) 

From Prot 
) subsel 
where Received = 1 
+0

@NatePet我看到你用我的答案在你的新問題http://stackoverflow.com/questions/9740065/sql-server-subquery-with-case。請記住,如果它對你有幫助,請不要忘記加註/接受這個答案(我相信這樣做,因爲你在另一個問題中使用它) – 2012-03-16 15:34:36

+0

完成。謝謝您的幫助 – 2012-03-16 16:44:13

0

事情是這樣的:

SELECT 
    * 
FROM 
(
    select 
     p.ID, 
     Received = (select Rec from Exp where EstAmt = (select MAX(ex.EstAmt) from Exp ex where ex.Prot = p.ID 
         and EstAmt > 0) 
         ) 
    From Prot 
) AS t 
where 
    Received = 1 
1

如果你只需要選擇它是ON1,整個子查詢移到where子句,它以1比你並不需要選擇它如果你知道它是什麼...

(我知道這不會回答你如何在子查詢上,但它可以解決您的問題。)