2012-03-16 7 views
1

У меня есть следующий SQL:SQL Server подзапрос с футляром

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 

Я хочу сделать дело на Полученное таким образом, если он равен 1, то есть это сказать «Да» еще есть это сказать «Нет». Я знаю, как это сделать, но не в этой ситуации, как я получил, который является подзапросом.

Я попытался следующие, но не работает

 select * from 
    ( 
     select p.ID, 

     case Received = (select Rec from Exp 
         where EstAmt = (select MAX(ex.EstAmt) from Exp ex 
             where ex.Prot = p.ID and EstAmt > 0) 
       )  
     when 1 then 'Yes' 
     else 'No' 
     end Received 
     From Prot 
    ) subsel 
    where Received = 1 
+0

У вас нет псевдонима 'p' нигде в обоих запросах. Это одна проблема. Я ответил ниже. – Kaf

ответ

1

Вместо того

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

попробовать:

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

Другие ответы важные моменты тоже, но вы не можете присвоить значение подзапроса в редакцию, просто использовать одно значение после того, как «случай» и убедитесь, что подзапрос не возвращает несколько значений.

0

Я думаю, что вам нужно удалить «Полученное» только после того, как «конец». То есть. изменение:

when 1 then 'Yes' 
else 'No' 
end Received 

в

when 1 then 'Yes' 
else 'No' 
end 
0

Так же, как в фильтре, получить это case вне подзапросом:

select subsel.ID, 
    case subsel.Received 
     when 1 then 'Yes' 
     else 'No' 
    end Received 
    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 
Смежные вопросы