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

Откуда: дровишки?
Сообщений: 6067
Всем привет.

Никак не могу написать запрос.
Есть таблица с полями: id, obj1_id, obj2_id, type

На выходе нужна таблицы с тремя полями: id, obj1_id, obj2_id
При type = 1 obj1_id и obj2_id остаются как есть,
при type = 2 я их меняю местами,
при type = 3 нужно вернуть сразу две строки:
id, obj1_id, obj2_id
id, obj2_id, obj1_id

Первые два условия легко реализуются через case, а вот с последним справиться не могу.

Пока что придумал только вариант с двумя "пробегами":
select distinct *
from (
	select
		t1.obj1_id as 'obj1_id',
		t1.obj2_id as 'obj2_id'
	from
		t1
	where
		t1.type in (1,3)
	union
	select
		t1.obj2_id,
		t1.obj1_id
	from
		t1
	where
		t1.type in (2,3)
)

Но т.к. таблица t1 получается в результате вложенного запроса, то итоговая конструкция получается довольно громоздкой.

Можно ли это сделать как-то иначе?
25 апр 13, 12:15    [14229250]     Ответить | Цитировать Сообщить модератору
 Re: [Помощь с запросом] Две строки из одной  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22550
cross join (select 0 as num union all select 1) as t
25 апр 13, 12:18    [14229269]     Ответить | Цитировать Сообщить модератору
 Re: [Помощь с запросом] Две строки из одной  [new]
Anddros
Member

Откуда:
Сообщений: 1077
declare @t table (id int identity, obj1_id int, obj2_id int, [type] int)
insert @t values (1,2,1),(3,4,2),(5,6,3)

select id, obj1_id*(2-n)+obj2_id*(n-1), obj1_id*(n-1)+obj2_id*(2-n)
from @t t, (values (1),(2)) n(n)
where [type]&n > 0
25 апр 13, 12:30    [14229375]     Ответить | Цитировать Сообщить модератору
 Re: [Помощь с запросом] Две строки из одной  [new]
brbrbr
Member

Откуда: дровишки?
Сообщений: 6067
Спасибо за советы.
25 апр 13, 14:04    [14229969]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить