This is a fairly typical task and typical setup. Congratulation on moving in the right direction with the two-staged campaign and intermediate coupon storage table.
What you actually need is that 2nd communication to store somewhere what coupon IDs were communicated for each customer. This way you could link all facts together using coupon ID.
If SAS MA supported dynamic variable-based treatment attributes (like SAS RTDM does), there would be a natural and beautiful solution - you assigned a Treatment with a dynamic attribute ("coupon code") that you'd populate using the coupon code exported variable. And it got stored to the dynamic_treatment_attribute_ext table. Unfortunately, this is not the case as SAS MA still lacks this feature (treatment attributes in SAS MA can not be truly dynamic based on a variable)
What you are supposed to do is to Export the data from your communication (customer id, response tracking code, today's date, communication code etc - it's optional as you can derive it from the response tracking code) + coupon code and store it in a new custom table. You can use a separate (2nd) Export Definition (Table - append) in addition to the one which is already there. Or you can rely on what export definition is already there - exporting to the channel (is it a file or a table?) - and use a Post-Process that picks up this piece of data and stored it for long-term usage in the table you need.
If you only export one coupon code per contact, then some people would write a post-process node that stores the coupon code to the EXTERNAL_INFO_ID1 column of CI_Contact_History table - thus avoiding the need to create a separate table. This is an actually better solution as it makes easier for you to maintain data consistency - whenever you delete records from CI_Contact_History for any reason, the coupon code will go with them.
-------
Dmitriy Alergant, Tier One Analytics