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

Откуда:
Сообщений: 48
Друзья, есть две таблицы. Для простоты прикладываю их в виде файла Excel. На листе "Таблица" - исходные данные, на листе "Ставки" - информация по % ставкам.
Сначала опишу структуру таблицы "Ставки". Каждая строка содержит информацию об определенной дате, в эту дату ставки привлечения в зависимости от сроков 1, 7, 14, 30 и т.д. дней были соответствующими. Кол-во дней - это наименования столбцов. Структура таблицы "Ставки" - самопальная, ее можно переделать в любой удобный формат.

Таблица "Таблица" - тут исходные данные. Мне нужно заполнить столбец "Ставка" по следующей логике:
- смотрим поле "data_otkritia", находим в таблице "Ставки" наиболее подходящее "младшее" значение. Т.е. для нашего конкретного примера, для даты 16.07.12, мы выбрали 14.07.12.
- затем в зависимости от величины "Срок" выбираем из выбранной строки за 14.07.12 значение % ставки, которое соответствует этому сроку при условии, что мы берем наименьший подходящий срок, т.е. для Таблица.data_otkritia = 25, выбираем значение 7,15% (на срок до 30 дней), для Таблица.data_otkritia = 56, выбираем значение 7,48% (на срок до 60 дней) и т.д.

Еще раз подчеркну - структура таблицы "Ставки" может быть как угодно изменена, если это необходимо для более удобной работы.

Прошу помочь, очень нужно.

К сообщению приложен файл (Расчет ТЦ.xlsx - 61Kb) cкачать
23 мар 13, 23:10    [14087344]     Ответить | Цитировать Сообщить модератору
 Re: помогите связать две таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
mitiok2002
Еще раз подчеркну - структура таблицы "Ставки" может быть как угодно изменена, если это необходимо для более удобной работы.
Нужно сделать таблицу из трёх полей:
Дата
Срок
Ставка

Тогда запрос простой
select t.*, s.*
from Таблица t
	outer apply (
		select top 1 s.*
		from Ставка s
		where s.Data < t.data_otkritia
			and s.Срок < t.Срок
		order by s.Data desc, s.Срок desc
	) s
23 мар 13, 23:27    [14087414]     Ответить | Цитировать Сообщить модератору
 Re: помогите связать две таблицы  [new]
mitiok2002
Member

Откуда:
Сообщений: 48
спасибо за оперативный ответ! Попробую завтра, отпишусь по результатам
23 мар 13, 23:41    [14087487]     Ответить | Цитировать Сообщить модератору
 Re: помогите связать две таблицы  [new]
mitiok2002
Member

Откуда:
Сообщений: 48
alexeyvg
Тогда запрос простой
select t.*, s.*
from Таблица t
	outer apply (
		select top 1 s.*
		from Ставка s
		where s.Data < t.data_otkritia
			and s.Срок < t.Срок
		order by s.Data desc, s.Срок desc
	) s

Сделал таблицу, как вы посоветовали, но ... могу экспериментировать только в MS Access. А он жалуется на ошибку в запросе в там где outer apply. Может быть можно как-то по другому?
24 мар 13, 17:04    [14089245]     Ответить | Цитировать Сообщить модератору
 Re: помогите связать две таблицы  [new]
mitiok2002
Member

Откуда:
Сообщений: 48
mitiok2002
alexeyvg
Тогда запрос простой
select t.*, s.*
from Таблица t
	outer apply (
		select top 1 s.*
		from Ставка s
		where s.Data < t.data_otkritia
			and s.Срок < t.Срок
		order by s.Data desc, s.Срок desc
	) s

Сделал таблицу, как вы посоветовали, но ... могу экспериментировать только в MS Access. А он жалуется на ошибку в запросе в там где outer apply. Может быть можно как-то по другому?

Я так понял, что MS Access не поддерживает оператор outer apply. Нельзя ли как-нибудь сделать тоже самое при помощи LEFT JOIN
24 мар 13, 17:18    [14089258]     Ответить | Цитировать Сообщить модератору
 Re: помогите связать две таблицы  [new]
mitiok2002
Member

Откуда:
Сообщений: 48
поставил mySQL, думал, что он поддерживает outer apply... оказалось нет. Подскажите другой вариант.
Наверное в неправильном форуме спрашиваю, но все-таки - как сделать то что мне нужно без использования outer apply
24 мар 13, 17:40    [14089304]     Ответить | Цитировать Сообщить модератору
 Re: помогите связать две таблицы  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31959
mitiok2002
Подскажите другой вариант.
Если вам нужно решение для MSSQL, то поставьте MSSQL, а не Access, MySQL или DB2

Если вам нужно решение для другой СУБД, то спрашивайте лучше на другом форуме, там быстрее подскажут.

mitiok2002
Может быть можно как-то по другому?
Для одного поля outer apply легко меняется на подзапрос, просто переносом текста.

select t.*,
	(
		select top 1 s.Ставка
		from Ставка s
		where s.Data < t.data_otkritia
			and s.Срок < t.Срок
		order by s.Data desc, s.Срок desc
	) as Ставка
from Таблица t
24 мар 13, 19:00    [14089485]     Ответить | Цитировать Сообщить модератору
 Re: помогите связать две таблицы  [new]
mitiok2002
Member

Откуда:
Сообщений: 48
alexeyvg
Если вам нужно решение для другой СУБД, то спрашивайте лучше на другом форуме, там быстрее подскажут.

да я понимаю, просто уж начал спрашивать в этом форуме... Затормозил :)
alexeyvg
mitiok2002
Может быть можно как-то по другому?
Для одного поля outer apply легко меняется на подзапрос, просто переносом текста.
select t.*,
	(
		select top 1 s.Ставка
		from Ставка s
		where s.Data < t.data_otkritia
			and s.Срок < t.Срок
		order by s.Data desc, s.Срок desc
	) as Ставка
from Таблица t

Спасибо огромное, с небольшой корректировкой все отлично заработало!
24 мар 13, 19:36    [14089568]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить