If your compiler is clever, and your case values start with "0" or "1" and are a consecutive numbers, then your compiler will translate the switch-case to a jump via a table of pointers to the different cases with the case value as index.
In C it would look like
typedef void (* function_ptr_t)(void);
function_ptr_t Case1Destinations[]={Case1_entry, Case2_entry, Case3_entry};
and you can call it like
Case1Destinations[a]();
With the nested switch-cases you can of yause also do a multi-dimensinal array with one dimension for each switch.
But it would be best if you write separate functions for each case handling routine.