É algo do tipo procurar em ( a, b, c ) e substituir por ( 1, 2, 3 ) conforme a posição.
Por enquanto usei o CASE WHEN e foi.
:cSql := "SELECT LPAD( IDCADASTRO, 6, '0' ) AS ID, " + ;
" CDNOME, CDCEP, CDENDERECO, CDBAIRRO, CDCIDADE, CDCEP, " + ;
" MAXEMI.DATA," + ;
" " + RegiaoList() + " AS REGIAO" + ;
" FROM JPCADASTRO" + ;
" LEFT JOIN ( SELECT FICLIFOR, MAX(FIDATEMI) AS DATA FROM JPFINAN GROUP BY FICLIFOR ) AS MAXEMI ON MAXEMI.FICLIFOR=JPCADASTRO.IDCADASTRO" + ;
" WHERE YEAR( MAXEMI.DATA ) > 2012" + ;
" ORDER BY REGIAO"
a montagem é aqui, e com certeza a lista completa é bem maior:
FUNCTION RegiaoList()
LOCAL oRegioes := {}, oElement, cSql
AAdd( oRegioes, { "B2", "010", "CENTRO (SE E REPUBLICA)" } )
AAdd( oRegioes, { "B2", "011", "BOM RETIRO" } )
cSql := " CASE"
FOR EACH oElement IN oRegioes
cSql += " WHEN LEFT( CDCEP, 3 ) = " + StringSql( oElement[ 2 ] ) + " THEN " + StringSql( oElement[ 1 ] + "-" + oElement[ 3 ] )
NEXT
cSql += " ELSE ''"
cSql += " END"
RETURN cSql
O SELECT é pra trazer os clientes, indicando a qual região cada um pertence.
Talvez até melhor gravar isso em tabela no MySQL pra simplificar, e pro cliente adicionar regiões...
É que na época foi só teste... não sei se futuramente pode ser usado pra valer... mas como estou convertendo tudo.... até testes estou convertendo...