SQL从表中选择下一个可用代码
我想为没有促销代码表的客户ID记录表A选择一个可用的促销代码表B。 我想我有每个表的基本SQL,但不确定如何将它们组合成一个输出 ---表A---SQL从表中选择下一个可用代码,sql,oracle,responsys,Sql,Oracle,Responsys,我想为没有促销代码表的客户ID记录表A选择一个可用的促销代码表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/
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)
我会这样想:
Select a.CUST_ID, b.PROMO_CODE as MY_NEW_CODE
FROM $A$ a, $B$ b
WHERE a.MY_CODE = b.PROMO_CODE
AND trunc(a.CREATED_DATE) >= trunc(sysdate -1)
AND b.PROMO_CODE_STATUS is NULL
最后,我在每张表上使用了ROW_编号,这很有效: 从中选择* 选择按a.CUST\U ID追加订购的行号ASC作为行号CUST\U ID、a.CUST\U ID、a.MY\U新代码 从$A$A开始,其中A.MY_NEW_代码为NULL,且trunca.LOADED_DATE>=truncsysdate-1 c 内连接 选择按b.PROMO\U代码ASC追加订购的行号作为行促销\U代码、b.PROMO\U代码、b.PROMO\U代码状态 从$B$B开始,其中B.PROMO_代码_状态为空p 在c.Row\U CUST\U ID=p.Row\U促销码上 它产生了预期的结果: 行客户ID |客户ID |我的新代码|行促销代码|促销代码|促销代码|促销代码|状态 1 | 111 | 1 | BBB| 2 | 222 | 2 | DDD| 3 | 333 | 3 | FFF| 从更新的表格中: ---表A 客户ID |我的新代码|加载日期| 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 促销代码|促销代码|状态 AAA |已使用 BBB| CCC |指定 DDD| EEE |分配
FFF |您在使用Oracle吗?如果是这样的话,那么你应该把这个标签添加到你的问题中。谢谢,但这不会为那些没有促销代码的记录选择促销代码,因为它与a.MY_code=b.Promo_code匹配。它不返回任何结果。