Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > MS SQL Server


Автор: Moid 16.12.2008, 12:32
Код

select p1, p2 ,P3 =
      CASE
         ...       
      END
from table1

where P3 = 1 


Нужно что бы вывелись строки, у которых P3 = 1,
 но так как P3 - это новое поле именно так сравнить нельзя, ругается, что не видит P3 в where.

Подскажите как сранить.

Автор: ТоляМБА 16.12.2008, 12:47
Код
select p1, p2 ,P3 =
      CASE
         ...       
      END
from 
(Select *
from table1
where P3 = 1 ) as TempTable


Добавлено через 5 минут и 15 секунд
Moid, но интересно зачем к Р3 привязывать Case если оно всегда будет равно единице?!

Автор: Akina 16.12.2008, 12:56
Цитата(ТоляМБА @  16.12.2008,  13:47 Найти цитируемый пост)
интересно зачем к Р3 привязывать Case если оно всегда будет равно единице

У него это вычисляемое поле... 

Moid
Код

Select *
From 
(
  select p1, p2 ,P3 =
      CASE
         ...       
      END
  from table1
)
where P3 = 1 

Автор: Moid 16.12.2008, 13:01
ТоляМБА, не работает.

Цитата

но интересно зачем к Р3 привязывать Case если оно всегда будет равно единице?!


ну... да точно!!!

Цитата

У него это вычисляемое поле... 


Да именно, но если выводить в результат только одно его значение, то все вычесления можно записать в where

Спасибо!

Автор: ТоляМБА 16.12.2008, 13:09
Akina, после закрывающейся скобки надо ставить as Псевдоним, насколько я помню  smile 


Цитата(Akina @  16.12.2008,  14:56 Найти цитируемый пост)
Select *From 
(  select p1, p2 ,P3 =
      CASE
         ...
             END
  from table1) as ABC 
where P3 = 1 


Moid, а мне то "+" за что?!


Автор: Akina 16.12.2008, 14:25
Цитата(ТоляМБА @  16.12.2008,  14:09 Найти цитируемый пост)
после закрывающейся скобки надо ставить as Псевдоним, насколько я помню

Иной раз можно этим и принебречь. Тут как раз такой случай.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)