I'm trying to assign list records a segment ID that is based on some math. I'm getting an error that the switch function is too complex. Is there a better way to do this?
This should work in theory of receiving a mail code from the user, then attaching a segment field to each record based on their donation performance.
ie.
ContactKey Segment
23423 NGH1101A
32432 NGH1101E
etc... etc...
CODE
SELECT Donation_Extremes.ContactKey, [MailingCode] & Switch(
[HPC]>99 And DateDiff('m',[MRC],Date())<13 And [Contacts_OfflineOnlyDonors].[ContactKey]>0,"A",
[HPC]>99 And DateDiff('m',[MRC],Date())>12 and Contacts_OfflineOnlyDonors.ContactKey>0,"B",
DateDiff('m',[MRC],Date())<19 And [HPC]>49 And [HPC]<100 and Contacts_OfflineOnlyDonors.ContactKey>0,"C",
DateDiff('m',[MRC],Date())<13 And [HPC]>24 And [HPC]<50 and Contacts_OfflineOnlyDonors.ContactKey>0,"D",
DateDiff('m',[MRC],Date())<10 And [HPC]>9 And [HPC]<25 and Contacts_OfflineOnlyDonors.ContactKey>0,"E",
[HPC]>99 And DateDiff('m',[MRC],Date())<13 And [Contacts_MixedChannelDonors].[ContactKey]>0,"H",
[HPC]>99 And DateDiff('m',[MRC],Date())>12 and Contacts_MixedChannelDonors.ContactKey>0,"J",
DateDiff('m',[MRC],Date())<19 And [HPC]>49 And [HPC]<100 and Contacts_MixedChannelDonors.ContactKey>0,"K",
DateDiff('m',[MRC],Date())<13 And [HPC]>24 And [HPC]<50 and Contacts_MixedChannelDonors.ContactKey>0,"L",
DateDiff('m',[MRC],Date())<10 And [HPC]>9 And [HPC]<25 and Contacts_MixedChannelDonors.ContactKey>0,"M",
[HPC]>99 And DateDiff('m',[MRC],Date())<13 And [Contacts_OnlineOnlyDonors].[ContactKey]>0,"V",
[HPC]>99 And DateDiff('m',[MRC],Date())>12 and Contacts_OnlineOnlyDonors.ContactKey>0,"W",
DateDiff('m',[MRC],Date())<19 And [HPC]>49 And [HPC]<100 and Contacts_OnlineOnlyDonors.ContactKey>0,"X",
DateDiff('m',[MRC],Date())<13 And [HPC]>24 And [HPC]<50 and Contacts_OnlineOnlyDonors.ContactKey>0,"Y",
DateDiff('m',[MRC],Date())<10 And [HPC]>9 And [HPC]<25 and Contacts_OnlineOnlyDonors.ContactKey>0,"Z"
) AS Segment, Donation_Extremes.HPC, Donation_Extremes.MRC, Contacts_OnlineOnlyDonors.ContactKey, Contacts_MixedChannelDonors.ContactKey, Contacts_OfflineOnlyDonors.ContactKey
FROM (((Donation_Inception INNER JOIN Donation_Extremes ON Donation_Inception.ContactKey = Donation_Extremes.ContactKey) LEFT JOIN Contacts_OfflineOnlyDonors ON Donation_Extremes.ContactKey = Contacts_OfflineOnlyDonors.ContactKey) LEFT JOIN Contacts_MixedChannelDonors ON Donation_Extremes.ContactKey = Contacts_MixedChannelDonors.ContactKey) LEFT JOIN Contacts_OnlineOnlyDonors ON Donation_Extremes.ContactKey = Contacts_OnlineOnlyDonors.ContactKey;
[HPC]>99 And DateDiff('m',[MRC],Date())<13 And [Contacts_OfflineOnlyDonors].[ContactKey]>0,"A",
[HPC]>99 And DateDiff('m',[MRC],Date())>12 and Contacts_OfflineOnlyDonors.ContactKey>0,"B",
DateDiff('m',[MRC],Date())<19 And [HPC]>49 And [HPC]<100 and Contacts_OfflineOnlyDonors.ContactKey>0,"C",
DateDiff('m',[MRC],Date())<13 And [HPC]>24 And [HPC]<50 and Contacts_OfflineOnlyDonors.ContactKey>0,"D",
DateDiff('m',[MRC],Date())<10 And [HPC]>9 And [HPC]<25 and Contacts_OfflineOnlyDonors.ContactKey>0,"E",
[HPC]>99 And DateDiff('m',[MRC],Date())<13 And [Contacts_MixedChannelDonors].[ContactKey]>0,"H",
[HPC]>99 And DateDiff('m',[MRC],Date())>12 and Contacts_MixedChannelDonors.ContactKey>0,"J",
DateDiff('m',[MRC],Date())<19 And [HPC]>49 And [HPC]<100 and Contacts_MixedChannelDonors.ContactKey>0,"K",
DateDiff('m',[MRC],Date())<13 And [HPC]>24 And [HPC]<50 and Contacts_MixedChannelDonors.ContactKey>0,"L",
DateDiff('m',[MRC],Date())<10 And [HPC]>9 And [HPC]<25 and Contacts_MixedChannelDonors.ContactKey>0,"M",
[HPC]>99 And DateDiff('m',[MRC],Date())<13 And [Contacts_OnlineOnlyDonors].[ContactKey]>0,"V",
[HPC]>99 And DateDiff('m',[MRC],Date())>12 and Contacts_OnlineOnlyDonors.ContactKey>0,"W",
DateDiff('m',[MRC],Date())<19 And [HPC]>49 And [HPC]<100 and Contacts_OnlineOnlyDonors.ContactKey>0,"X",
DateDiff('m',[MRC],Date())<13 And [HPC]>24 And [HPC]<50 and Contacts_OnlineOnlyDonors.ContactKey>0,"Y",
DateDiff('m',[MRC],Date())<10 And [HPC]>9 And [HPC]<25 and Contacts_OnlineOnlyDonors.ContactKey>0,"Z"
) AS Segment, Donation_Extremes.HPC, Donation_Extremes.MRC, Contacts_OnlineOnlyDonors.ContactKey, Contacts_MixedChannelDonors.ContactKey, Contacts_OfflineOnlyDonors.ContactKey
FROM (((Donation_Inception INNER JOIN Donation_Extremes ON Donation_Inception.ContactKey = Donation_Extremes.ContactKey) LEFT JOIN Contacts_OfflineOnlyDonors ON Donation_Extremes.ContactKey = Contacts_OfflineOnlyDonors.ContactKey) LEFT JOIN Contacts_MixedChannelDonors ON Donation_Extremes.ContactKey = Contacts_MixedChannelDonors.ContactKey) LEFT JOIN Contacts_OnlineOnlyDonors ON Donation_Extremes.ContactKey = Contacts_OnlineOnlyDonors.ContactKey;