So in this case you have a table with 3 columns whose headers are:



Invoice ID
Code
Unacceptable Code Combination

This is even easier and is done with 2 queries and a module.

Module code:
This is nearly verbatim the module code from the example database I posted earlier

Query 1 (this is a Totals query)
Column 1: Group by Invoice ID
Column 2: Group by Unacceptable Code Combination

Query 2 (change to SQL view)
SELECT [qryOne].[ID], Conc("Field1","ID",[ID],"qryOne") AS Field1,
FROM qryOne
GROUP BY [qryOne].[ID];
(This code is also from the example database. This assumes your Invoice ID field is called ID and your Unacceptable Code Combination field is called Field1. Naturally if you edit the code to your named fields you'll have to update the module as well. The module code also assumed your ID was a number not text. See that post if your ID is text.)

I fail understand however how your end result is helpful. Let's say we have 3 numbers. 1 can't go with 2 or 3 but 2 can go with 3. The first query would look like this

ID 1: 1, 2
ID 1: 1, 3
ID 1: 2, 1
ID 1: 3, 1

And your end result would be:

ID 1: 1, 2, 3

From just this data how can one interpret that the combination 2 and 3 are okay and the real problem is 1 with 2 and 1 with 3? Does one remove 2 and 3 and leave 1 or does one remove 1 and leave 2 and 3?