编辑:因为我正在使用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是一个简单的连接(我不需要帮助)。
答案 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