• I have a little more time today, corrected version below. 
    The cte is to (1) make it easier to use in a function and (2) to make it easier to pull from a permanent table -- this is not the kind of thing you'd want to have to recreate in multiple places in code in case it changed later.  If you want max performance, replace the cte with the static string
    ' ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
    Btw, I believe your last version of the code will still add 'A' to the first non-suffixed entry.


    ;WITH cte_suffix_chars AS (
        SELECT ' ABCDEFGHIJKLMNOPQRSTUVWXYZ' AS suffix_chars
    )
    SELECT A.PONUMBER, A.PODATE,
        A.PONUMBER + RTRIM(SUBSTRING(suffix_chars, ISNULL(POSUFFIX_Byte, 0) + rank_num, 1)) AS PONUMBERTOUSE
    FROM (
        SELECT *, DENSE_RANK() OVER(PARTITION BY PONUMBER ORDER BY PODATE) AS rank_num
        FROM #PONUMBERTESTIMPORT
    ) AS A
    CROSS JOIN cte_suffix_chars
    LEFT OUTER JOIN (
        SELECT LEFT(PONUMBER, LEN(PONUMBER) - 1) AS PONUMBER,
              CHARINDEX(MAX(RIGHT(PONUMBER, 1)), MAX(suffix_chars)) AS POSUFFIX_Byte
        FROM #PONUMBERTEST
        CROSS JOIN cte_suffix_chars
        WHERE RIGHT(PONUMBER, 1) NOT LIKE '[0-9]'
        GROUP BY LEFT(PONUMBER, LEN(PONUMBER) - 1)
    ) AS T ON T.PONUMBER = A.PONUMBER

    SQL DBA,SQL Server MVP(07, 08, 09) A socialist is someone who will give you the shirt off *someone else's* back.