有2个表格,其数据如下。 “ID”列在两个表中均可用。有人可以帮助我,我怎么得到所需的输出。使用oracle连接2个表格
表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
有2个表格,其数据如下。 “ID”列在两个表中均可用。有人可以帮助我,我怎么得到所需的输出。使用oracle连接2个表格
表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
你在这里什么是加入要显示的ind
值仅在每个id
的第一个cd
上。您可以在case
表达与row_number()
窗函数做到这一点:
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
这应该做的伎俩。
SELECT table1.ID, table2.CD, table1.IND
FROM table1
INNER JOIN table2
ON table1.ID = table2.ID;
我通常会想到,如果你有一个表中的ID列,你会想要做一个简单的内部关系联接:http://sqlfiddle.com/#!4/e8e41/5
select t1.id, t2.cd, t1.ind
from t1
inner join t2
on t2.id = t1.id
然而,这种方法不会给你指定的结果。您的字段将填充每行。
也许你只想加入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
每个id
的第一cd
关联。在这种情况下,类似的东西(使用公共表格表达式)可能适用于您: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
谢谢。有效 – pavan