P_street & P_street & "," &
Doesn't really make sense as it appears to refer to the same field twice. Perhaps there's a typo there?
It also doesn't seem to match your sample output where you would appear to need:
P_Street & ", " & P_Street2 & Case (...
To get the results shown and
P_Street & IF ( Not IsEmpty ( P_Street2 ) ; ", " & P_Street2 ) & Case (...
To avoid the extra comma when P_Street2 is empty.
Sorry for the typo. This is the corrected script.
P_street & P_street2 & "," & Case( not IsEmpty( P_street) and not IsEmpty(P_city & P_state & P_zip ); "¶" ) &
P_city & Case( not IsEmpty( P_city ) and not IsEmpty( P_state & P_zip ); " " ) &
P_state & Case( not IsEmpty( P_state ) and not IsEmpty( P_zip ); " " ) &
P_zip & Case( not IsEmpty( P_city & P_state & P_zip ) and not IsEmpty( P_country ); "¶" )
You're script seems over complicated for labels. Wouldn't you want to make sure that record had at least a street (address1), city, state and zip during data entry, before printing labels?
What you show as a calculation still would not put a comma between P_Street and P_Street2. Are you sure that's correct? Any chance that the comma is actually text in one of the fields?