[英]Row_Number function inside Case statement
需要以下邏輯的幫助:
我有一個包含以下數據的訂單表:
訂單號 | 創建日期 | 賣方 |
---|---|---|
001 | 01-01-2022 | xx |
001 | 02-01-2022 | xx |
001 | 03-01-2022 | xx |
001 | 04-01-2022 | yy |
我想要 output 作為:
訂單號 | 創建日期 | 賣方 | 序數詞 | Reverse_Ordinal_number |
---|---|---|---|---|
001 | 01-01-2022 | xx | 1個 | 3個 |
001 | 02-01-2022 | xx | 2個 | 2個 |
001 | 03-01-2022 | xx | 3個 | 1個 |
001 | 04-01-2022 | yy | 0 | 0 |
我試過以下 SQL:
Select Order_Id , Created_date ,
Case when seller = 'xx' then row_number() over (partition by Order_Id Order by Created_Date ) else 0 end as Ordinal_number,
Case when seller = 'xx' then row_number() over (partition by Order_Id Order by Created_Date Desc) else 0 end as Reverse_Ordinal_number
from Orders
我得到以下 output:
訂單號 | 創建日期 | 賣方 | 序數詞 | Reverse_Ordinal_number |
---|---|---|---|---|
001 | 01-01-2022 | xx | 1個 | 4個 |
001 | 02-01-2022 | xx | 2個 | 3個 |
001 | 03-01-2022 | xx | 3個 | 2個 |
001 | 04-01-2022 | yy | 0 | 0 |
當我按升序排序但按降序排序時效果不佳
根據評論,序號應該只顯示給xx
賣家。 但是,查詢中的row_number
調用並未考慮賣家。 將它添加到partition by
子句中,你應該沒問題:
SELECT Order_Id,
Created_date,
CASE Seller WHEN 'xx'
THEN ROW_NUMBER() OVER (PARTITION BY Order_Id, Seller -- Here!
ORDER BY Created_Date)
ELSE 0 END AS Ordinal_number,
CASE Seller WHEN 'xx'
THEN ROW_NUMBER() OVER (PARTITION BY Order_Id, Seller -- And here!
ORDER BY Created_Date DESC)
ELSE 0 END AS Reverse_Ordinal_number,
FROM Orders
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.