我有以下 sql 查詢,不同的發票具有不同的狀態。
WITH D AS (SELECT 'ABC' INV#,'PROCESSED' STATUS FROM DUAL UNION ALL
SELECT 'ABC' INV#,'ERROR' STATUS FROM DUAL UNION ALL
SELECT 'XYZ' INV#,'PROCESSED' STATUS FROM DUAL UNION ALL
SELECT 'AJSKS' INV#,'ERROR' STATUS FROM DUAL union all
SELECT 'SPG' INV#,'PROCESSED' STATUS FROM DUAL UNION ALL
SELECT 'SPG' INV#,'ERROR' STATUS FROM DUAL
)
SELECT * FROM D
如果有重復的 Invoice# 想要獲取帶有狀態的發票,PROCESSED否則無論狀態是什么都可以回傳。
uj5u.com熱心網友回復:
select * from (
select * , row_number() over (partition by INV#, order by case STATUS when 'PROCESSED' then 1 else 0 end desc) rn
from D
) t where rn = 1
uj5u.com熱心網友回復:
要查找重復的行并回傳優先處理的行而不是未處理的行,您可以使用:
SELECT inv#, status
FROM (
SELECT d.*,
COUNT(*) OVER (PARTITION BY inv#) AS cnt,
ROW_NUMBER() OVER (
PARTITION BY inv#
ORDER BY CASE status WHEN 'PROCESSED' THEN 1 ELSE 2 END
) AS rn
FROM d
)
WHERE cnt > 1
AND rn = 1;
其中,對于您的樣本資料,輸出:
INV# 地位 美國廣播公司 處理 SPG 處理
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/388843.html
下一篇:基于另一個欄位SQL遞增日期
