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

Откуда:
Сообщений: 36
Задана таблица тарифов между городами:
(From_city, To_city, Price) :
(Новосибирск, Москва, 500)
(Питер, Казань, 300)
Как на основе имеющихся данных получить максимально полную таблицу тарифов, принимая, что если тарифа (Новосибирск => Москва) в базе нет, то можно взять обратный - (Москва, Новосибирск, 500).Как это написать в одном SQL-запросе.
12 авг 11, 07:39    [11107264]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с интересным запросом!!!  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
or

(From_City='Новосибирск' and To_City='Москва')
or
(From_City='Москва' and To_City='Новосибирск')
12 авг 11, 07:56    [11107275]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с интересным запросом!!!  [new]
angel_zar
Member

Откуда: Барнаул
Сообщений: 902
А дальше вам захочется прокладывание маршрута

Надо определить цену Москва - Барнаул, но есть только Москва - Новосибирск и Новосибирск - Барнаул
Ну а потом еще интереснее что ни буть будет, с 3-5 пересадками и там вариантов маршрута больше будет, надо будет выбрать оптимальный
12 авг 11, 07:59    [11107280]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с интересным запросом!!!  [new]
javaq
Member

Откуда:
Сообщений: 36
нужно просто ,если тарифа новосиб-москва нет(from city,to city),то взять обратный
12 авг 11, 08:02    [11107285]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с интересным запросом!!!  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Можно где-то так:
declare @t table(
				From_city nvarchar(30)
				, To_city nvarchar(30)
				, Price money);

insert
	@t
	values
	(N'Новосибирск', N'Москва', 500)
	, (N'Питер', N'Казань', 300)
	, (N'Казань', N'Питер', 300)

;with cte(
	From_city
	, To_city
	, Price
	)
	as
	(
select
	coalesce(t2.From_city, t1.To_city)
	, coalesce(t2.To_city, t1.From_city)
	, coalesce(t2.Price, t1.Price)
from @t t1
full outer join @t t2 on t1.From_city = t2.To_city
		and t1.To_city = t2.From_city
	)
select
	*
from @t
union
select
	*
from cte;


Сообщение было отредактировано: 12 авг 11, 08:11
12 авг 11, 08:11    [11107294]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить