默认 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;
我创建了一个 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;