Редактировать: Salesforce Marketing Cloud использует набор SQL Server .
Я использую SQL-запрос в Salesforce Marketing Cloud, что означает, что я ограниченвыполнить оператор «Выбор» как перезапись таблицы [Распределение].Я пытаюсь выполнить следующие действия:
select * from [Subscribers] A
inner join [Master Table] B on A.MemberID = B.MemberID
Эта часть работает, как и ожидалось.
Далее у меня есть два поля, Reward1 и Reward2, каждое из которых соответствует определенному RewardCode в [Предложения].Поэтому то, что я пытаюсь сделать (я думаю), должно быть левым соединением с [Подписчиками] и [Предложениями] для MemberID, где RewardCode = 111111, и левым соединением с [Подписчиками] и [Предложениями], где RewardCode = 222222. ОднакоЗдесь я, похоже, создаю дубликаты записей.
Пример схемы может выглядеть так:
таблица основных элементов
memberID | email | fname | lname
1111 | 1111@email.com | One | Name
2222 | 2222@email.com | Two | Name
3333 | 3333@email.com | Three | Name
4444 | 4444@email.com | Four | Name
подписчиков
memberID | status | subscriberkey
1111 | active | 1111@email.com
2222 | active | 2222@email.com
3333 | active | 3333@email.com
4444 | active | 4444@email.com
мастер-таблица наград
memberID | rewardcode
1111 | 111111
1111 | 111111
1111 | 111111
2222 | 111111
2222 | 222222
2222 | 222222
3333 | 222222
3333 | 111111
4444 | 222222
4444 | 333333
4444 | 222222
И в идеале результирующая таблица будет выглядеть примерно так:
[distribution]
subscriberkey | memberId | status| reward1 | reward2
1111@email.com| 1111 | active | TRUE | FALSE
2222@email.com| 2222 | active TRUE | TRUE
3333@email.com| 3333 | active TRUE | TRUE
4444@email.com| 4444 | active FALSE | TRUE
Полный запрос:
SELECT A.SubscriberKey AS SubscriberKey, A.EmailAddress AS EmailAddress,
A.MemberID AS MemberId, A.Status AS Status,
A.Decile AS Decile, A.Segment AS Segment, M.Firstname AS FirstName,
M.LastName AS LastName, M.Points AS PointsAvailable,
M.Experience AS Experience,
CASE
WHEN M.[Preferred Delivery Method for Offers] = 2 THEN 'SMS'
ELSE 'Email'
END AS PreferredDeliveryOffers,
CASE
WHEN M.[Preferred Delivery Method for Non-Offers] = 2 THEN 'SMS'
ELSE 'Email'
END AS PreferredDeliveryNonOffers,
CASE
WHEN R.MemberRewardBarcode IS NOT NULL AND
R.[Member ID] = M.MemberId AND
R.MemberRewardBarcode = 1111111 THEN 'Reward15'
ELSE ''
END AS Reward15,
CASE
WHEN B.MemberRewardBarcode IS NOT NULL AND
B.[Member ID] = M.MemberId AND
B.MemberRewardBarcode = 2222222 THEN 'RewardBDay'
ELSE ''
END AS RewardBDay
FROM Subscribers A
INNER JOIN [Master Member Table] M
ON A.MemberID = M.MemberId
LEFT JOIN (
SELECT DISTINCT MemberRewardBarcode, [Member ID]
FROM [master rewards table] R
WHERE R.MemberRewardBarcode = 1111111 AND
R.CancelTimestamp IS NULL AND
R.ExpireTimestamp IS NULL AND
R.RedeemTimestamp IS NULL
) R ON A.MemberID = R.[Member ID]
LEFT JOIN (
SELECT DISTINCT MemberRewardBarcode, [Member ID]
FROM [master rewards table] R
WHERE R.MemberRewardBarcode = 2222222 AND
R.CancelTimestamp IS NULL AND
R.ExpireTimestamp IS NULL AND
R.RedeemTimestamp IS NULL
GROUP BY MemberRewardBarcode, [Member ID]
) B ON A.MemberID = R.[Member ID]