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

Откуда:
Сообщений: 103
Здравствуйте,

Помогите, пожалуйста:
Есть большой подзапрос (и по кол-ву строк кода, и по объему выбираемых данных), который в запросе должен быть использован несколько раз.
Как это организовать?

Я попыталась написать так:

select a, b, c, xxx,
case when xxx = (select min(xxx) from Subquery) then ... end as yyy
from (select a, b, c, xxx from...) as Subquery


Но не вкатило.

Чувствую, что не очень красиво дала формулировку. Если будут вопросы, пишите.

Спасибо
Евгения
18 сен 09, 09:40    [7676908]     Ответить | Цитировать Сообщить модератору
 Re: как использовать подзапрос несколько раз  [new]
PaulYoung
Member

Откуда: Москва
Сообщений: 2549
evgeniya bri,

как вариант, киньте свой подзапрос во времянку
18 сен 09, 09:44    [7676930]     Ответить | Цитировать Сообщить модератору
 Re: как использовать подзапрос несколько раз  [new]
evgeniya bri
Member

Откуда:
Сообщений: 103
во времянку это значит в tempdb?

Спасибо
Евгения
18 сен 09, 09:51    [7676981]     Ответить | Цитировать Сообщить модератору
 Re: как использовать подзапрос несколько раз  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
SELECT	 a ,b ,c ,xxx
	,CASE	WHEN xxx = min(xxx)OVER()		THEN 1
		WHEN Row_Number()OVER(ORDER BY xxx) = 1	THEN 2
		END	AS yyy
FROM  (	SELECT	 1 as a ,2 as b ,3 as c ,4 as xxx)	AS Subquery
18 сен 09, 09:54    [7677006]     Ответить | Цитировать Сообщить модератору
 Re: как использовать подзапрос несколько раз  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
@table
#table
cte
18 сен 09, 09:54    [7677008]     Ответить | Цитировать Сообщить модератору
 Re: как использовать подзапрос несколько раз  [new]
evgeniya bri
Member

Откуда:
Сообщений: 103
Knyazev Alexey,

а времянка - значит времянка :))
спасибо ))
18 сен 09, 09:55    [7677020]     Ответить | Цитировать Сообщить модератору
 Re: как использовать подзапрос несколько раз  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
evgeniya bri,
Ну и чем мой вариант не прокатил?
Версия сервера хоть какая?
18 сен 09, 10:00    [7677041]     Ответить | Цитировать Сообщить модератору
 Re: как использовать подзапрос несколько раз  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
evgeniya bri, в Вашем случае лучше всё-таки over, если версия сервера позволит.
18 сен 09, 10:03    [7677066]     Ответить | Цитировать Сообщить модератору
 Re: как использовать подзапрос несколько раз  [new]
evgeniya bri
Member

Откуда:
Сообщений: 103
Mnior,

Версия sql server 2005 sp3 ent.ed.

прокатил! еще как прокатил!
Да, over -классная штука.
ТОлько есть одна проблема:

значения в столбце xxx могут повторяться разных строках.
а мне нужно каждому значению поставить в соотв др.значение в столбец ууу.
если делать Row_Number()OVER(ORDER BY xxx), то этого результата достичь нельзя.

Как выкрутиться?

Спасибо большое!
18 сен 09, 10:05    [7677078]     Ответить | Цитировать Сообщить модератору
 Re: как использовать подзапрос несколько раз  [new]
iljy
Member

Откуда:
Сообщений: 8711
evgeniya bri,

а примерчик можно? Непонятно, что именно надо ставить в соответствие и по какому принципу.
18 сен 09, 12:02    [7678072]     Ответить | Цитировать Сообщить модератору
 Re: как использовать подзапрос несколько раз  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
evgeniya bri
значения в столбце xxx могут повторяться разных строках.

Как выкрутиться?
А чем Min()OVER() не прокатил?
В добавок есть много функций с OVER, и помимо ORDER BY есть ещё и PARTITION BY.
18 сен 09, 18:48    [7681188]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить