калькуляционные поля в конструкции where

Яzz
Дата: 23.01.2009 10:59:09
а можно ли использовать калькуляционные поля C1 , C2 в конструкции where, где-то так :

select 
	id, 
	case id 
		when 1 then 0 
		else 1 
	end as C1,
	case id 
		when 2 then 0 
		else 1 
	end as C2,
	....
from #testt
where C1 > 0 OR C2 > 0
Glory
Дата: 23.01.2009 11:02:37
Алиасы столбцов нельзы использовать в том же запросе, где они созданы. Кроме ORDER
Яzz
Дата: 23.01.2009 11:06:01
спасибо,
а нет ли какой-нить хитрого хода для обхода этого ограничения?
Glory
Дата: 23.01.2009 11:08:16
Яzz
спасибо,
а нет ли какой-нить хитрого хода для обхода этого ограничения?

Вложенные запросы
iap
Дата: 23.01.2009 11:10:00
Яzz
спасибо,
а нет ли какой-нить хитрого хода для обхода этого ограничения?
Есть. Либо derived table, либо CTE (если версия сервера>=90)
Паганель
Дата: 23.01.2009 11:30:01
бывает, что иногда хочется экзотики
declare @t table(id int)
insert into @t 
select 1 union all
select 2 union all
select 3

select id, c1, c2
  from @t
  cross apply (select case id when 1 then 0 else 1 end as c1
                     ,case id when 2 then 0 else 1 end as c2
               ) as tt
 where c1 > 0 or c2 > 0

id          c1          c2
----------- ----------- -----------
1           0           1
2           1           0
3           1           1

(3 row(s) affected)
>=2005, разумеется
Зайцев Фёдор
Дата: 23.01.2009 11:43:37
никогда бы не догадался, что можно так использовать cross apply )
Паганель
Дата: 23.01.2009 11:49:36