簡體   English   中英

Case 語句中的 Row_Number function

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM