Sql Server-保存子查询值的字段

Sql Server-保存子查询值的字段,sql,sql-server,Sql,Sql Server,我有以下疑问: select p.ID, Received = (select Rec from Exp where EstAmt = (select MAX(ex.EstAmt) from Exp ex where ex.Prot

我有以下疑问:

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
在上面,Received是我创建的一个字段,作为别名,它将获取Rec的值。Rec是表中的一个字段


但是当我把Received放在where子句中时,我得到了:无效的列名'Received'。如上所述,Received不是表中的字段,而是从子查询中获取值的占位符。如果where子句中的值为1,则我需要显示结果。您需要过滤原始查询的结果,将其用作子查询:

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
大概是这样的:

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上的位置,请将整个子查询移动到where子句,并将其与1进行比较。你不需要选择它,如果你知道它是什么


(我知道这不能回答子查询上的how do you where,但它解决了您的问题。)

U无法在SELECT子句中保留子查询…@NatePet我看到您在的新问题中使用了我的答案。如果这个答案对你有帮助的话,请不要忘记投票/接受它(我相信它确实有帮助,因为你在其他问题中使用了它)