我正在尝试在 Salesforce Marketing Cloud 中创建一个自动化功能,将客户从滚动表中提取出来,并将其放入条目表中,并从车辆表中提取推荐的库存编号。推荐的库存编号应为包含 2 个库存编号的字符串,与滚动表中库存编号的品牌和型号相匹配。
测试_滚动表
客户ID | 库存编号 |
---|---|
CID101 | 3001 |
CID102 | 3002 |
测试_车辆表
库存编号 | 制作 | 型号 |
---|---|---|
3001 | 福特 | 探索者 |
4067 | 福特 | 探索者 |
8913 | 福特 | 探索者 |
3002 | 本田 | 雅阁 |
6325 | 本田 | 雅阁 |
1717 | 本田 | 雅阁 |
测试_条目表
客户ID | 库存编号 | 推荐库存编号 |
---|---|---|
CID101 | 3001 | 4067,8913 |
CID102 | 3002 | 6325,1717 |
我有一个查询,可以提取RecommendedStockNumbers的所有匹配品牌/型号,但我不知道如何将其限制为2(因此我不会超出条目表的字符限制)。
SELECT
c.CustomerId,
c.StockNumber,
STRING_AGG(v2.StockNumber, ',') WITHIN GROUP (ORDER BY v2.StockNumber) AS RecommendedStockNumbers
FROM
Test_RollingTable c
LEFT OUTER JOIN
Test_EntryTable e ON e.CustomerId = c.CustomerId
INNER JOIN
Test_VehicleTable v1 ON c.StockNumber = v1.StockNumber
INNER JOIN
Test_VehicleTable v2
ON v1.StockNumber <> v2.StockNumber
AND v1.VehicleMake = v2.VehicleMake
AND v1.VehicleModel = v2.VehicleModel
WHERE
e.CustomerId IS NULL
GROUP BY
c.CustomerId, c.StockNumber
HAVING
COUNT(v2.StockNumber) > 0
我建议你将现有的查询嵌套1层,这样你就可以计算出相关的行号,这样你就可以限制串联必须处理的行数,如下所示:
SELECT
CustomerId
, StockNumber
, STRING_AGG(StockNumber, ',') WITHIN GROUP (ORDER BY StockNumber) AS RecommendedStockNumbers
FROM (
SELECT
c.CustomerId
, c.StockNumber
, v2.StockNumber
, ROW_NUMBER() OVER (PARTITION BY c.CustomerId, c.StockNumber
ORDER BY v2.StockNumber
) AS RowNo
FROM Test_RollingTable c
LEFT OUTER JOIN Test_EntryTable e ON e.CustomerId = c.CustomerId
INNER JOIN Test_VehicleTable v1 ON c.StockNumber = v1.StockNumber
INNER JOIN Test_VehicleTable v2 ON v1.StockNumber <> v2.StockNumber
AND v1.VehicleMake = v2.VehicleMake
AND v1.VehicleModel = v2.VehicleModel
WHERE e.CustomerId IS NULL
) d
WHERE d.RowNo <= 2 --<< limit the result to a maximum of 2 rows per group
GROUP BY
c.CustomerId
, c.StockNumber