我創建了一個表,將產品資訊與主ID表連接起來。Master ID是一個與產品資訊共同的外鍵。因此,每個購買了多個產品的人都會有一個共同的Master ID。我想得到最早賣給客戶的產品--所以我使用了ROW_NUMBER() PARTITION BY.
。SELECT PRODUCT_NUM, CO_Cd, PROD_CD, Date,
MASTER_ID。
ROW_NUMBER() OVER (PARTITION BY MASTER_ID ORDER BY Date) 視窗
FROM MyTable
ORDER BY MASTER_ID
然而,我面臨的情況是,兩個產品是在同一日期購買的。所以SQL我想是隨機地把ROW_NUM = 1分配給哪個產品。我想把ROW_NUM = 1默認為STATIONERY,而不是PRINTER在這種情況下。 我嘗試了一個案例陳述句,即 PARTITION BY MASTER_ID CASE WHEN PROD_CD = 'STATIONERY' THEN 'PA' ORDER BY Date。在這個問題上需要更多的指導。
| PRODUCT_NUM[/th | CO_Cd[/th | PROD_CD | MASTER_ID日期ROW_NUM[/th | 1854 | MAWCPRINTER
|---|
想要的輸出:
| PRODUCT_NUM[/th | CO_Cd[/th | PROD_CD | MASTER_ID日期ROW_NUM[/th | 1854 | MAWC10003493039?1/1/2021 | 1567 | PREF
|---|
uj5u.com熱心網友回復:
你只是在PARTITION BY中添加了CASE,它應該在ORDER BY
SELECT
PRODUCT_NUM,
CO_Cd,
PROD_CD。
Date,
MASTER_ID。
ROW_NUMBER() OVER (PARTITION BY MASTER_ID
ORDER BY Date, CASE WHEN PROD_CD = 'STATIONERY' THEN 1 ELSE 2 END) 視窗
FROM MyTable
ORDER BY MASTER_ID
uj5u.com熱心網友回復:
你可以在prod_cd中包含order by。 為此,'STATIONERY' > 'PRINTER',你希望它在第一位,所以需要降序排序:
SELECT PRODUCT_NUM, CO_Cd, PROD_CD, Date, MASTER_ID,
ROW_NUMBER() OVER (PARTITION BY MASTER_ID ORDER BY Date, PROD_CD DESC) AS ROW_NUM
FROM MyTable
ORDER BY MASTER_ID;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/311060.html
標籤:
