2

PROMO_CODE がない CUST_ID レコード (テーブル A) に対して使用可能な PROMO_CODE (テーブル B) を選択したいと考えています。各テーブルの基本 SQL があると思いますが、これらを組み合わせて出力する方法がわかりません。

-----表A -----

CUST_ID|CREATED_DATE|MY_CODE
XYZ111|1/1/2015|5
XYZ222|1/1/2015|6
XYZ333|7/12/2018|   
XYZ444|7/13/2018|   
XYZ555|7/14/2018|   
XYZ666|2/2/2012|3
XYZ777|2/2/2012|2
XYZ888|7/15/2018|   
XYZ999|6/6/2016|4
XYZ1110|6/6/2016|1

-----表B -----

PROMO_CODE|PROMO_CODE_STATUS
1|assigned
2|used
3|
4|used
5|assigned
6|
7|
8|assigned
9|assigned
10|

----望ましい出力-----

CUST_ID|MY_NEW_CODE
XYZ333|3
XYZ444|6
XYZ555|7
XYZ888|10

----これまでのところ接続されていないもの-----

Select a.CUST_ID, b.PROMO_CODE as MY_NEW_CODE  

(Select a.CUST_ID, a.CREATED_DATE, a.MY_CODE
from $A$ a where 
a.MY_CODE is NULL AND trunc(a.CREATED_DATE) >= trunc(sysdate -1))

(Select b.PROMO_CODE, b.PROMO_CODE_STATUS
from $B$ b where 
b.PROMO_CODE_STATUS is NULL)
4

2 に答える 2

0

各テーブルで ROW_NUMBER() を使用することになり、それは機能します:

SELECT * FROM (SELECT ROW_NUMBER() OVER(ORDER BY a.CUST_ID ASC) AS Row_CUST_ID, a.CUST_ID, a.MY_NEW_CODE FROM $A$ a a.MY_NEW_CODE は NULL AND trunc(a.LOADED_DATE) >= trunc(sysdate -1)) c INNER JOIN (SELECT ROW_NUMBER() OVER(ORDER BY b.PROMO_CODE ASC) AS Row_PROMO_CODE, b.PROMO_CODE, b.PROMO_CODE_STATUS FROM $B$ b where b.PROMO_CODE_STATUS is NULL) p ON c.Row_CUST_ID = p .Row_PROMO_CODE


期待される結果が生成されます。

ROW_CUST_ID|CUST_ID|MY_NEW_CODE|ROW_PROMO_CODE|PROMO_CODE|PROMO_CODE_STATUS

1 | 111 | | | 1 | BBB |
2 | 222 | | | 2 | DDD |
3 | 333 | | | 3 | FFF |

更新された表から:

-----テーブルA

CUST_ID | MY_NEW_CODE | LOADED_DATE

111 | | | 2018-07-18 00:00:00.0
222 | | | 2018-07-18 00:00:00.0
333 | | | 2018-07-19 00:00:00.0
444 | | | 2018-07-12 00:00:00.0

-----テーブルB

PROMO_CODE | PROMO_CODE_STATUS

AAA | 中古
BBB |
CCC | 割り当てられた
DDD |
EEE | 割り当てられた
FFF |

于 2018-07-19T04:35:39.107 に答える