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

Откуда:
Сообщений: 170
Имеются таблицы inca(ID,H,HA) и perf(ID,KR,KRA,ind).
Для тех значений perf для которых ind>0 нужно посчитать значения для полей KRA, которые связаны с таблицей inca следующей формулой:
KRA=H1+(H2-H1)*(KR-H1')/(H2'-H1'),
где H1-первое значение H меньшее KR для данного IDSKV,H1-первое значение H большее KR для данного IDSKV,
H1'-соответствующее H1 - HA,H2'- cоответствующее H2 - HA.
28 мар 12, 18:50    [12329560]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
И что не получается-то?
28 мар 12, 18:51    [12329566]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Oilboy
Member

Откуда:
Сообщений: 170
Гавриленко Сергей Алексеевич,

Не пойму как связь между таблицами делать..
28 мар 12, 18:53    [12329578]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
Oilboy
Не пойму как связь между таблицами делать..

фразой JOIN
И почему кросспостинг ?

Сообщение было отредактировано: 28 мар 12, 18:57
28 мар 12, 18:57    [12329602]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Oilboy
Member

Откуда:
Сообщений: 170
ну к примеру, use bd_740;
select (select max(inca.H) from inca join perf on inca.id=perf.id where inca.h<=perf.kr_int)
выводит одно число, а хотелось бы для каждой строки получать эти значения
28 мар 12, 19:05    [12329671]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
Oilboy
ну к примеру, use bd_740;

https://www.sql.ru/forum/actualthread.aspx?tid=127456 п.4 и п.6
28 мар 12, 19:07    [12329679]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
Oilboy
ну к примеру, use bd_740;
select (select max(inca.H) from inca join perf on inca.id=perf.id where inca.h<=perf.kr_int)
выводит одно число, а хотелось бы для каждой строки получать эти значения

Вы говорите что нужно для каждой строки, а сервер просите выдать только одно значение, максимальное - max(inca.H)
28 мар 12, 20:44    [12330014]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Oilboy
Member

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

Microsoft SQL Server Management Studio 9.00.1399.00

Буду собирать код постепенно, поэтому нуждаюсь в советах. Буду очень благодарен.
use bd_740;
select perf.idskv,inca.H from inca join perf on perf.idskv=inca.idskv where inca.h=(select max(inca.H) from inca where inca.h<=perf.kr_int) and perf.ro_srd>0
результат этого запроса только H для которых kr_int совпадает с H, что не так??
29 мар 12, 12:20    [12332570]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
Oilboy
результат этого запроса только H для которых kr_int совпадает с H, что не так??

https://www.sql.ru/forum/actualthread.aspx?tid=127456 п.6
29 мар 12, 12:22    [12332589]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Oilboy
Member

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

А еще не понятно, как сделать update записи для определенных полей без цикла??
29 мар 12, 12:22    [12332591]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Oilboy
Member

Откуда:
Сообщений: 170
Glory,
Таблица PERF
IDSKV KR_INT POD_INT KRA_INT POD_INT RO_SRD
20100021 3821 3834 NULL NULL 0.1
20100021 3830 3847 NULL NULL 0.1
20100021 3758 3770 NULL NULL 0.1
20100021 3778 3794 NULL NULL 0.1
20100021 3719 3728 NULL NULL 0.1
20100021 3748 3756 NULL NULL 0.1
20100035 3693 3744 NULL NULL 0.1
20100035 3752 3787 NULL NULL 0.1
20100035 3798 3825 NULL NULL 0.1
20100719 3774 3780 NULL NULL 0.1
20100719 3750 3757 NULL NULL 0.1
20100719 3802 3812 NULL NULL 0.1
.....................................................................................

Таблица INCA
IDSKV H HA
20100020 0 53.2
20100020 3900 -3846.8
20100021 0 53.4
20100021 20 33.4
20100021 40 13.4
20100021 60 -6.6
20100021 80 -26.6
20100021 100 -46.6
20100021 120 -66.6
20100021 140 -86.6
20100021 160 -106.6
20100021 180 -126.6
20100021 200 -146.6
20100021 220 -166.6
20100021 240 -186.6
20100021 260 -206.6
....................................................
29 мар 12, 12:34    [12332695]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Oilboy
Member

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

Добрые товарищи, помогите нубу!
29 мар 12, 12:40    [12332747]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
Нуб в состоянии сообщить, какой результат должен получиться для приведенных данных ?
29 мар 12, 12:43    [12332776]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Oilboy
Member

Откуда:
Сообщений: 170
Glory
Нуб в состоянии сообщить, какой результат должен получиться для приведенных данных ?

Нужно посчитать и записать значения в полях KRA_INT, POD_INT таблицы perf для каждой строчки где RO_SRD>0. Есть формула по которой вычисляются эти значения. В эту формула входят величины H , которые для каждого idskv из perf есть два крайних значения H из INCA между которыми лежит KR_INT из PERF. НУ вот что то типо того..
29 мар 12, 12:55    [12332878]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Glory
Member

Откуда:
Сообщений: 104751
Oilboy
Нужно посчитать и записать значения в полях KRA_INT, POD_INT таблицы perf для каждой строчки где RO_SRD>0. Есть формула по которой вычисляются эти значения. В эту формула входят величины H , которые для каждого idskv из perf есть два крайних значения H из INCA между которыми лежит KR_INT из PERF. НУ вот что то типо того..

Еще раз
"Нуб в состоянии сообщить, какой результат должен получиться для приведенных данных ? "
Разницу между "результат" и "описание вычислений" понимаете ?
29 мар 12, 12:56    [12332887]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
GeneralMotors
Member

Откуда:
Сообщений: 85
Oilboy,
может как-нить так, сам не тестил:

update a
set a.KRA = b.H1+(c.H2-b.H1)*(a.KR-(b.H1-d.HA))/(c.H2-e.HA-b.H1+d.HA)
from perf a 
left join 
(select top 1 ID, H as H1 from inca where inca.ID=a.ID and H<a.KR order by H1 desc) b on b.ID=a.ID
left join
(select top 1 ID, H as H2 from inca where inca.ID=a.ID and H>a.KR order by H1 desc) c on b.ID=a.ID
left join 
 inca d on d.ID=a.ID and d.H=b.H1 
left join  
 inca e on e.ID=a.ID and e.H=c.H2 
29 мар 12, 12:58    [12332907]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
GeneralMotors
Member

Откуда:
Сообщений: 85
Oilboy,
опечатки поправлю:
update a
set a.KRA = b.H1+(c.H2-b.H1)*(a.KR-(b.H1-d.HA))/(c.H2-e.HA-b.H1+d.HA)
from perf a 
left join 
(select top 1 ID, H as H1 from inca where inca.ID=a.ID and H<a.KR order by H1 desc) b on b.ID=a.ID
left join
(select top 1 ID, H as H2 from inca where inca.ID=a.ID and H>a.KR order by H1 desc) c on[color=red] с.[/color]ID=a.ID
left join 
 inca d on d.ID=a.ID and d.H=b.H1 
left join  
 inca e on e.ID=a.ID and e.H=c.H2 
29 мар 12, 13:01    [12332934]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Oilboy
Member

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

An expression of non-boolean type specified in a context where a condition is expected, near 'с'.
А ещё бы вычесть из полученного значения ALT_R из таблицы BSKV которая связана с perf idskv .
29 мар 12, 13:11    [12333035]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
GeneralMotors
Member

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

а так лучше?
update a
set a.KRA = b.H1+(c.H2-b.H1)*(a.KR-(b.H1-d.HA))/(c.H2-e.HA-b.H1+d.HA)
from perf a 
left join 
(select top 1 ID, H as H1 from inca where inca.ID=a.ID and H<a.KR order by H1 desc) b on b.ID=a.ID
left join
(select top 1 ID, H as H2 from inca where inca.ID=a.ID and H>a.KR order by H1 desc) c on с.ID=a.ID
left join 
 inca d on d.ID=a.ID and d.H=b.H1 
left join  
 inca e on e.ID=a.ID and e.H=c.H2 
29 мар 12, 13:15    [12333081]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
GeneralMotors
Member

Откуда:
Сообщений: 85
Oilboy
GeneralMotors,

An expression of non-boolean type specified in a context where a condition is expected, near 'с'.
А ещё бы вычесть из полученного значения ALT_R из таблицы BSKV которая связана с perf idskv .


тогда как-нить так:
update a
set a.KRA = b.H1+(c.H2-b.H1)*(a.KR-(b.H1-d.HA))/(c.H2-e.HA-b.H1+d.HA) - f.ALT_R
from perf a 
left join 
(select top 1 ID, H as H1 from inca where inca.ID=a.ID and H<a.KR order by H1 desc) b on b.ID=a.ID
left join
(select top 1 ID, H as H2 from inca where inca.ID=a.ID and H>a.KR order by H1 desc) c on[color=red] с.[/color]ID=a.ID
left join 
 inca d on d.ID=a.ID and d.H=b.H1 
left join  
 inca e on e.ID=a.ID and e.H=c.H2
left join  
 BSKV  f on f.ID=a.ID
29 мар 12, 13:18    [12333109]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Oilboy
Member

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

Как вычесть то что я написал в предыдущем сообщении?
29 мар 12, 13:18    [12333111]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
GeneralMotors
Member

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

точнее так:

update a
set a.KRA = b.H1+(c.H2-b.H1)*(a.KR-(b.H1-d.HA))/(c.H2-e.HA-b.H1+d.HA) - f.ALT_R
from perf a 
left join 
(select top 1 ID, H as H1 from inca where inca.ID=a.ID and H<a.KR order by H1 desc) b on b.ID=a.ID
left join
(select top 1 ID, H as H2 from inca where inca.ID=a.ID and H>a.KR order by H1 desc) c on с.ID=a.ID
left join 
 inca d on d.ID=a.ID and d.H=b.H1 
left join  
 inca e on e.ID=a.ID and e.H=c.H2
left join  
 BSKV  f on f.ID=a.ID
29 мар 12, 13:20    [12333127]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Oilboy
Member

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

use bd_740;
update a
set a.KRA_INT = b.H1+(c.H2-b.H1)*(a.KR_int-(b.H1-d.HA))/(c.H2-e.HA-b.H1+d.HA) - f.ALT_R
from perf a
left join
(select top 1 idskv, H as H1 from inca where inca.IDskv=a.idskv and H<a.KR_int order by H1 desc) b on b.IDskv=a.IDskv
left join
(select top 1 idskv, H as H2 from inca where inca.IDskv=a.IDskv and H>a.KR_int order by H1 desc) c on с.IDskv=a.IDskv
left join
inca d on d.IDskv=a.IDskv and d.H=b.H1
left join
inca e on e.IDskv=a.IDskv and e.H=c.H2
left join
BSKV f on f.IDskv=a.IDskv


в таком виде компили, выдает ошибки

Msg 4104, Level 16, State 1, Line 2
The multi-part identifier "a.idskv" could not be bound.
Msg 4104, Level 16, State 1, Line 2
The multi-part identifier "a.KR_int" could not be bound.
Msg 4104, Level 16, State 1, Line 2
The multi-part identifier "a.IDskv" could not be bound.
Msg 4104, Level 16, State 1, Line 2
The multi-part identifier "a.KR_int" could not be bound.
Msg 207, Level 16, State 1, Line 8
Invalid column name 'H1'.
Msg 4104, Level 16, State 1, Line 8
The multi-part identifier "с.IDskv" could not be bound.

Но ещё нужно условие учесть, что нужно обновить только те строки PERF для которых RO_SRD>0
29 мар 12, 13:28    [12333205]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
GeneralMotors
Member

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

давай скрипты на create этих таблиц и заполнение данными , отлажу update...
29 мар 12, 13:37    [12333286]     Ответить | Цитировать Сообщить модератору
 Re: запрос из двух таблиц  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Господа. Укажите уже свои контакты в профиле. Ваши почтовые ящики в теме на форуме никому не интересны.

Сообщение было отредактировано: 29 мар 12, 14:21
29 мар 12, 14:20    [12333703]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить