我在Oracle数据库工作,我需要为下面的表创建查询(查询结果)。
CUSTOMER_REFENRECE LQ UN SPECIAL INSTRUCTIONS
------------------ ---- ---- --------------------------------
FI020098 null null Not Restricted as per ADR SP 375
FI020098 HZ 1219 HZ UN1219
FI020098 LQ 1219 UN1219
FI020097 null null null
FI020097 LQ 1219 UN1219
我需要每CUSTOMER_REFERENCE
只获得一行才能:
HZ> LQ> NULL
如果有一个HZ,那么只返回HZ行(跳过null)
FI020098 - HZ- 1219- HZ UN1219
如果没有任何HZ和至少一个LQ,请返回LQ行
FI020097 - LQ - 1219 - UN1219
答案 0 :(得分:0)
使用ROW_NUMBER()
分析函数,使用LQ
(或DECODE()
)按照排序重要性的顺序将CASE
值映射到数字:
SELECT *
FROM (
SELECT t.*,
ROW_NUMBER() OVER (
PARTITION BY customer_reference
ORDER BY DECODE( LQ, 'HZ', 1, 'LQ', 2, 3 ) ASC
) AS rn
FROM table_name t
)
WHERE rn = 1;