默认 ROW_NUMBER 为一个产品

Default ROW_NUMBER to One Product

我创建了一个 table,它将产品信息与主 ID table 结合起来。主 ID 是产品信息通用的外键。因此,购买了多种产品的每个人都将拥有一个共同的主 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) ROW_NUM
FROM MyTable
ORDER BY MASTER_ID

但是,我遇到了在同一天购买两种产品的情况。所以 SQL 我想是随机分配 ROW_NUM = 1 给任何产品。在这种情况下,我想默认 ROW_NUM = 1 到 STATIONERY 而不是 PRINTER。 我尝试了一个 Case 语句,其中 PARTITION BY MASTER_ID CASE WHEN PROD_CD = 'STATIONERY' THEN 'PA' ORDER BY Date。在这方面需要更多指导。

PRODUCT_NUM CO_Cd PROD_CD MASTER_ID Date ROW_NUM
1854 MAWC PRINTER 10003493039 1/1/2021 1
1567 PREF STATIONERY 10003493039 1/1/2021 2
2151 PSIA STATIONERY 10003497290 3/2/2021 1

想要的输出:

PRODUCT_NUM CO_Cd PROD_CD MASTER_ID Date ROW_NUM
1854 MAWC STATIONERY 10003493039 1/1/2021 1
1567 PREF PRINTER 10003493039 1/1/2021 2
2151 PSIA STATIONERY 10003497290 3/2/2021 1

您刚刚在 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) ROW_NUM
FROM MyTable
ORDER BY MASTER_ID

您可以在 order by 中包含 prod_cd。为此,'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;