Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 синтаксис подзапроса в case  [new]
всем привет
Guest
здравствуйте!

у меня запрос по синтаксису использования

есть запрос (для примера, смысла в нем нет)
select id, name, famale, (select age from t2 where id =10) from t1

нужно подзапрос поставить в case:

select id, name, famale,
case
when (select age from t2 where id =10) <> 3
then (select age from t2 where id =10)
else (select age from t2 where id =10) +2
end
from t1

в нем подзапрос (select age from t2 where id =10) повторяется несколько раз.
Наверное можно как-то записать его один раз, а потом обращаться к нему по имени (ну типа алиаса)?

Спасибо!
6 ноя 09, 22:37    [7894986]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис подзапроса в case  [new]
deto4ka
Member

Откуда: Пушкин
Сообщений: 215
Если поле age типа int, поле id уникально, то можно так
declare @a as int;
select @a=age from t2 where id =10
select id, name, famale,
case
when @a <> 3
then @a
else @a +2
end
from t1 
6 ноя 09, 22:51    [7895034]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис подзапроса в case  [new]
Ozzy-Osbourne
Member

Откуда: Balashikha
Сообщений: 139
Попробуйте так (в этом примере подзапрос из select-секции вынесен в outer apply; поля age2a и age2b есть равноправные варианты сокращения выражения: они равны удвоенному "возрасту", если он делится на 3 без остатка):
declare @t1 table(id int,name varchar(20))
declare @t2 table(id int, age int)

insert @t1 select  9,'John'
insert @t1 select 10,'Jack'
insert @t1 select 11,'Barry'
insert @t1 select 12,'Brian'
insert @t1 select 13,'Paul'

insert @t2 select  9,24
insert @t2 select 10,25
insert @t2 select 11,26
insert @t2 select 12,27
insert @t2 select 13,28

select t1.id,t1.name
	,x.age
	,age2a=case when x.age % 3<>0 then x.age else x.age*2 end
	,age2b=isnull(sign(nullif(x.age%3,0))*x.age,x.age*2)
from @t1 t1
outer apply(select age from @t2 t2 where t2.id=t1.id) x
Result:
idnameageage2aage2b
9John244848
10Jack252525
11Barry262626
12Brian275454
13Paul282828
7 ноя 09, 00:43    [7895413]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис подзапроса в case  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
select id, name, famale, (select case age when 3 then 0 else 2 end+age from t2 where id=10)
from t1
7 ноя 09, 11:19    [7896096]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис подзапроса в case  [new]
всем привет
Guest
спасибо!

сейчас поразбираюсь..

вариант iap больше всех заинтересовал...
7 ноя 09, 23:46    [7897441]     Ответить | Цитировать Сообщить модератору
 Re: синтаксис подзапроса в case  [new]
Ох...ий программизд
Guest
iap
select id, name, famale, (select case age when 3 then 0 else 2 end+age from t2 where id=10)
from t1

тока немножко не так:
select id, name, famale, (select case when age<>3 then 0 else 2 end+age from t2 where id=10)
from t1
9 ноя 09, 08:16    [7899536]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить