Как выбрать первые данные таблицы на основе другой таблицы на основе значения преемника одного столбца - PullRequest
0 голосов
/ 16 октября 2018

У меня есть две таблицы, мне нужно выбрать данные из обеих таблиц на основе одного условия.Моя структура таблиц:

create table Las(name nvarchar(50), Depth int);
insert into Las values('testName1', 25);
insert into Las values('testName2', 76);
insert into Las values('testName3', 31);
insert into Las values('testName4', 24);

create table Calci(name nvarchar(50), Depth int, carbon int, calcium int);
insert into Calci values('testName1', 24,30,10);
insert into Calci values('testName1', 30,25,15);
insert into Calci values('testName1', 31,24,16);
insert into Calci values('testName2', 75,25,15);
insert into Calci values('testName2', 80,24,16);
insert into Calci values('testName2', 85,28,25);

Условие: выберите Имя таблицы 1, Глубина вместе с таблицей углерода и столбца таблицы 2 на основе глубины таблицы 1 на следующей глубине таблицы 2. Итак, мой окончательный результат будет таким:

Output

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Я бы использовал APPLY:

SELECT t1.name, t1.Depth, t2.carbon, t2.calium 
FROM table1 t1 CROSS APPLY
     (SELECT TOP (1) t2.*
      FROM table2 t2
      WHERE t2.name = t1.name AND t2.Depth > t1.Depth
      ORDER BY t2.Depth 
     ) t2;
0 голосов
/ 16 октября 2018

Попробуйте, изменив имена your_first_table и your_second_table:

select t1.name,t1.Depth,q.carbon,q.calcium
from your_first_table t1
outer apply
(
    select top 1 carbon,calcium
    from your_second_table t2
    where 
        t2.name=t1.name
        and t2.Depth>t1.Depth -- From all the highest,....
    order by t2.Depth asc -- get the smaller
)q
...