连接表时有问题(左连接) 表1:
id1 amt1
1 100
2 200
3 300
表2:
id2 amt2
1 150
2 250
2 350
我的查询: 从table1中选择id1,amt1,id2,amt2 在table2.id1 = table1.id2
上左连接table2我认为o / p是:
id1 amt1 id2 amt2
row1: 1 100 1 150
row2: 2 200 2 250
row3: 2 200 2 350
我希望第3行中的o / p为
2 null 2 350
即我想避免重复数据(amt1) 朋友帮帮忙!
答案 0 :(得分:1)
选择不同 id1,amt1,id2,amt2来自table1左连接table2 on table2.id1 = table1.id2
试试这个吗?
答案 1 :(得分:1)
使用LEAD和LAG可以访问oracle中的前一行或后续行。
SELECT id1, decode(amt1, lag(amt1) over (order by id1, id2), '', amt1) amt1,
id2, amt2
FROM table1 left join table2 on table2.id1=table1.id2
ORDER BY id1, id2
查询的顺序和给滞后函数的顺序应该相同。
<强>解释强>
如果当前的am1与前面的amt1相同(在给定的顺序中前面),则省略该值。
修改强> 根据您的评论,添加额外的ID更改检查。
SELECT id1,
decode(id1, lag(id1) over (order by id1, id2),
decode(amt1, lag(amt1) over (order by id1, id2), '', amt1),
amt1) amt1,
id2, amt2
FROM table1 left join table2 on table2.id1=table1.id2
ORDER BY id1, id2
使用相同的LAG功能检查ID更改。表达式有点复杂,但它与嵌套的if语句相当。