我有一個具有以下結構的賬單表:
id | store_name | sum | payment_date
1 | Amazon | 10 | 11.05.2022
2 | Amazon | 20 | 11.05.2022
3 | Ebay | 15 | 11.05.2022
4 | AppleStore | 13 | 11.05.2022
5 | Google Play| 6 | 11.05.2022
我需要的是從表中選擇所有資料并根據賬單總額設定附加欄位“優先級”。前 2 行獲得優先級 1,接下來 2 行獲得優先級 2,其他行獲得 0:
id | store_name | sum | payment_date | priority
2 | Amazon | 20 | 11.05.2022 | 1
3 | Ebay | 15 | 11.05.2022 | 1
4 | AppleStore | 13 | 11.05.2022 | 2
1 | Amazon | 10 | 11.05.2022 | 2
5 | Google Play| 6 | 11.05.2022 | 0
此外,表包含有關不同日期的賬單資料(欄位 payment_date),并且應根據每一天的資料設定此優先級。
uj5u.com熱心網友回復:
對每天的行進行排序,然后根據行號分配優先級:
SELECT t.*,
CASE ROW_NUMBER()
OVER (PARTITION BY TRUNC(payment_date) ORDER BY sum DESC)
WHEN 1 THEN 1
WHEN 2 THEN 1
WHEN 3 THEN 2
WHEN 4 THEN 2
ELSE 0
END AS priority
FROM table_name t
其中,對于樣本資料:
CREATE TABLE table_name (id, store_name, sum, payment_date) AS
SELECT 1, 'Amazon', 10, DATE '2022-05-11' FROM DUAL UNION ALL
SELECT 2, 'Amazon', 20, DATE '2022-05-11' FROM DUAL UNION ALL
SELECT 3, 'Ebay', 15, DATE '2022-05-11' FROM DUAL UNION ALL
SELECT 4, 'Apple Store', 13, DATE '2022-05-11' FROM DUAL UNION ALL
SELECT 5, 'Google Play', 6, DATE '2022-05-11' FROM DUAL;
輸出:
ID STORE_NAME 和 付款日期 優先事項 2 亞馬遜 20 2022-05-11 00:00:00 1 3 易趣 15 2022-05-11 00:00:00 1 4 蘋果商店 13 2022-05-11 00:00:00 2 1 亞馬遜 10 2022-05-11 00:00:00 2 5 谷歌播放 6 2022-05-11 00:00:00 0
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472536.html
下一篇:如何使用%字串比較撰寫動態查詢?
