2015-09-30 2 views
1

Есть 2 таблицы с данными, как показано ниже. Идентификатор столбца доступен в обеих таблицах. может кто-то, пожалуйста, помогите мне, как мне получить желаемый результат.Соедините 2 таблицы с использованием oracle

Таблица 1:

ID IND 
101 Y 
102 N 

Таблица 2:

ID CD 
101 A 
101 B 
101 C 
101 D 
102 A 

Желаемый результат:

ID CD IND 
101 A Y 
101 B 
101 C 
101 D 
102 A N 

ответ

1

То, что вы здесь объединение, где вы хотите, чтобы отобразить значение ind только на первых cd каждого id. Вы можете сделать это с помощью функции row_number() окна в выражении case:

SELECT t1.id, t2.cd, CASE rn WHEN 1 THEN t1.ind ELSE NULL END AS ind 
FROM table1 t1 
JOIN (SELECT id, cd, ROW_NUMBER() OVER (PARTITION BY ind ORDER BY cd ASC) AS rn 
     FROM table2) t2 ON t1.id = t2.id 
+0

Спасибо. это сработало – pavan

0

Это должно сделать трюк.

SELECT table1.ID, table2.CD, table1.IND 
FROM table1 
INNER JOIN table2 
ON table1.ID = table2.ID; 
0

я обычно ожидать, что если у вас есть таблица с отношения в столбце ID, который вы хотели бы сделать простой внутреннее соединение: http://sqlfiddle.com/#!4/e8e41/5

select t1.id, t2.cd, t1.ind 
from t1 
inner join t2 
on t2.id = t1.id 

Однако, что бы не дать вы результат, который вы указали. Поле IND будет заполнено для каждой строки.

Возможно, вы ищете для объединения, где cd = 'A'. Я не знаю точку, но вы могли бы сделать что-то вроде этого: http://sqlfiddle.com/#!4/e8e41/12

select t2.id, t2.cd, coalesce(t1.ind,' ') as ind 
from t2 
left join t1 
on t2.id = t1.id 
and t2.cd = 'A' 
order by id, cd 

Или, возможно, вы хотите, чтобы связать ind с первым cd каждого id. В этом случае для вас может быть что-то вроде этого (с использованием общего табличного выражения): http://sqlfiddle.com/#!4/e8e41/20

with cte as (
    select id, cd, row_number() over (partition by id order by cd) as rn 
    from t2 
) 
select t1.id, cte.cd, case when rn = 1 then t1.ind else ' ' end as ind 
from t1 
inner join cte 
on t1.id = cte.id 
Смежные вопросы