The field names in the mapping table are not relevant, it just uses the first field to match the given value and returns the corresponding value in the second field of the mapping table.
Please have a look into Steve's blog:
Your thoughts are right: mapping tables don't care about field names. If you prefer, you can call the first field the input field and the second, the output field. Whenever the second parameter of the ApplyMap() function finds a value in the mapping table specified as the first parameter, it will always return the value in the second field. However, this is not the only function for mapping tables. You can change field names or table names as well using a mapping table. Again, in this case the mapping table field names don't care either.
Think of this mapping table
TitleMap: MAPPING LOAD * INLINE [ Short, Long Mr., Mister Dr., Doctor Ms., Miss ]; Customers: LOAD CustomerID, CustomerName, CustomerTitle ApplyMap('TitleMap', CustomerTitle) AS CustomerLongTitle FROM CustomerTable;
The ApplyMap might read: "check the table TitleMap for the input value of CustomerTitle and return the output value and store it into a field named CustomerLongTitle".
That's the way mapping tables work.
Hope that makes sense.
That is the 3rd parameter. So in the example above:
applymap('mapCustClass', [Customer Customer Class Code], 'Unassigned') as [Customer Customer Class],
...if the current value of [Customer Customer Class Code] exists in the map then the mapped value will be returned, otherwise (ELSE) 'Unassigned' will be returned.
Hope thsi helps,