oracle 不确定使用哪个联接

jjjwad0x  于 11个月前  发布在  Oracle
关注(0)|答案(1)|浏览(76)

我有数据如下2表,
| 罗勒|lang_opted|
| --|--|
| 1 | 1 |
| 1 | 2 |
| 2 | 5 |
| 3 | 4 |

Lang_table

| lang_id|郎|
| --|--|
| 1 |lang1|
| 2 |lang2|
| 3 |lang3|
| 4 |lang4|
| 5 |lang5|
我需要连接上面的两个表并获得如下数据,
我们在Oracle中有这些数据。请建议提出一个查询得到这个结果。
| 罗勒|lang1| lang2| lang3| lang4| lang5|
| --|--|--|--|--|--|
| 1 |Y| Y| N| N| N|
| 2 |N| N| N| N| Y|
| 3 |N| N| N| Y| N|
已尝试左联接、交叉联接、透视,不存在,但仍无法获得预期结果。

a2mppw5e

a2mppw5e1#

你不太可能有这么多的语言,你真的需要“动态SQL”,所以,如果你可以接受硬编码的语言作为列标题,那么你可以使用简单的“条件聚合”

Select
    t.rollnum
  , max(case when l.lang = 'lang1' then 'Y' else 'N' end) as 'lang1'
  , max(case when l.lang = 'lang2' then 'Y' else 'N' end) as 'lang2'
  , max(case when l.lang = 'lang3' then 'Y' else 'N' end) as 'lang3'
  , max(case when l.lang = 'lang4' then 'Y' else 'N' end) as 'lang4'
  , max(case when l.lang = 'lang5' then 'Y' else 'N' end) as 'lang5'
from your_table t
inner join lang_table l on t.lang_opted = l.lang_id
group by
    t.rollnum

你可以使用“pivot”,但坦率地说,我认为上面的更简单。你可以按照你想要的任何顺序排列列。如果你在任何时候添加一种新的语言,只需添加另一个带有标题的条件聚合即可。

相关问题