根据列值oracle为同一关键字提取一行

lmvvr0a8  于 2022-11-28  发布在  Oracle
关注(0)|答案(1)|浏览(146)

我在Oracle中有一个结果集,看起来像下面的3列:帐户、客户和地址:
| 账户。|委托人。|地址|
| - -| - -| - -|
| ABC公司|啊。|邮寄|
| ABC公司|啊。|住所地|
| 抄送|啊。|邮寄|
| 抄送|啊。|住所地|
| 抄送|啊。|办公室|
| 哦。|Bbb的。|住所地|
| 哦。|Bbb的。|办公室|
如果我有一个密钥对客户/账户,有多个地址声明,我只需要得到一个邮寄地址,如果我没有一个邮寄地址声明,我只需要采取住所之一。这些应该是结果:
| 账户。|委托人。|地址|
| - -| - -| - -|
| ABC公司|啊。|邮寄|
| 抄送|啊。|邮寄|
| 抄送|啊。|邮寄|
| 哦。|Bbb的。|住所地|

g0czyy6m

g0czyy6m1#

您可以找到每个帐户的第一行,然后使用CASE表达式设置优先级:

SELECT account, client, address
FROM   (
  SELECT account, client, address,
         ROW_NUMBER() OVER (
           PARTITION BY account
           ORDER BY CASE address
                    WHEN 'mailing'  THEN 1
                    WHEN 'domicile' THEN 2
                                    ELSE 3
                    END
         ) AS rn
  FROM   table_name
)
WHERE  rn = 1;

相关问题