Sql 如何在oracle数据库上使用用例

Sql 如何在oracle数据库上使用用例,sql,oracle,Sql,Oracle,我正在oracle 11g数据库上运行sql语句。输出如下所示,有一些连接(还有其他列,但重要的列是这些列) id |文件|地址 ---+----------------+-------------- 1 |身份证|哈德逊街 1 |驾驶执照|哈德逊街 1 |护照|哈德逊街 1 |身份证|麦克街 1 |驾驶执照|麦克街 1 |护照|麦克街 2 |驾驶执照|罗拉街 2 |护照|劳拉街 3 |护照|艾米街 3 |身份证|布格街 3 |身份证|苹果街 3 |护照|布格街 4 |驾驶执照|第16街 5 |

我正在oracle 11g数据库上运行sql语句。输出如下所示,有一些连接(还有其他列,但重要的列是这些列)

id |文件|地址 ---+----------------+-------------- 1 |身份证|哈德逊街 1 |驾驶执照|哈德逊街 1 |护照|哈德逊街 1 |身份证|麦克街 1 |驾驶执照|麦克街 1 |护照|麦克街 2 |驾驶执照|罗拉街 2 |护照|劳拉街 3 |护照|艾米街 3 |身份证|布格街 3 |身份证|苹果街 3 |护照|布格街 4 |驾驶执照|第16街 5 |身份证| 21街 但是我希望它是这样的:

id | document | address ---+----------------+-------------- 1 | identity_card | hudson street 1 | identity_card | mike street 2 | passport | laura street 3 | identity_card | bug street 3 | identity_card | apple street 4 | driver_licence | 16th street 5 | identity_card | 21st street id |文件|地址 ---+----------------+-------------- 1 |身份证|哈德逊街 1 |身份证|麦克街 2 |护照|劳拉街 3 |身份证|布格街 3 |身份证|苹果街 4 |驾驶执照|第16街 5 |身份证| 21街 正如您可能看到的,我正在查看每个ID,如果该ID有身份证作为文档,我将使用该行。如果没有身份证但有护照,我就照这条线走,如果没有身份证和护照,我就照驾照走

我怎么能做这样的事?我想我可以使用“case…when”,但我不知道如何将“case…when”应用到我的案例中


提前谢谢

有一种方法使用了
densite\u rank()


一种方法使用
稠密的\u rank()

在现有查询中,添加:

, rank() over (partition by id order by case document when 'identity_card' then 1
                                                      when 'passport'      then 2
                                                      when ......................
                                                      ...........................
                                        end) as rnk
然后,在外部查询中,选择所有内容并添加

where rnk = 1
在现有查询中,添加:

, rank() over (partition by id order by case document when 'identity_card' then 1
                                                      when 'passport'      then 2
                                                      when ......................
                                                      ...........................
                                        end) as rnk
然后,在外部查询中,选择所有内容并添加

where rnk = 1