如何从一个表到另一个表中获取不同的项目?

时间:2017-11-10 18:45:33

标签: sql

  

编辑:因为我正在使用ExactTarget(Salesforce Marketing Cloud),所以我只能访问 SELECT 语句。没有一个好的SQL会让这很容易。

我有一张顾客表和一张优惠券表。我想为符合条件的客户分配唯一的代码,但我对查询#1有点困惑。 (查询#2是一个简单的连接。)

表1

+-------------+-------------+------------+
| Customer    | CouponType  | CouponCode |
+-------------+-------------+------------+
| Customer1   | 20pctoff    |            |
| Customer2   | 20pctoff    |            |
| Customer3   | 10pctoff    |            |
| Customer4   | NULL        |            |
+-------------+-------------+------------+

表2

+-------------+-------------+------------+
| CouponType  | CouponCode  | AssignedTo |
+-------------+-------------+------------+
| 10pctoff    | Coupon1     |            |
| 20pctoff    | Coupon2     |            |
| 30pctoff    | Coupon3     |            |
+-------------+-------------+------------+

查询#1将导致以下结果:

Customer1 = Coupon2
Customer2 = none(不再提供20pctoff)
客户3 =优惠券1 Customer4 = none(不符合条件)

第二个更新表2的SQL是一个简单的连接(我不需要帮助)。

1 个答案:

答案 0 :(得分:0)

用第三张表解决。虽然不够优雅,但有时​​候使用ExactTarget需要付出代价。警告,需要一次迭代已知的CouponCodes 1。

新表:

+-----+------------------+--------------+
| ID  | Customer         | CouponCode   |
+-----+------------------+--------------+
  

目标表3,覆盖

SELECT row_number()OVER(按客户订购)作为ID,来自Table1的客户,其中CouponType =' 20pctoff'

  

目标表3,更新

SELECT row_number()OVER(按CouponCode排序)作为ID,CouponCode来自Table2,其中CouponType =' 20pctoff'和AssignedTo为NULL

  

目标表1,更新

SELECT t3.Customer,t3.CouponCode FROM table3 t3 inner join table1 t1 on t1.Customer = t3.Customer where t3.Customer is not NULL and t3.CouponCode not NULL

  

目标表2,更新

SELECT t3.Customer as AssignedTo,t3.CouponCode FROM table3 t3 inner join table2 t2 on t2.CouponCode = t3.CouponCode where t3.Customer is null null t3CouponCode not null