[firebase-br] Campo Calculado em Select
Edson T. Marques
marques em oriontec.com.br
Sex Fev 4 14:30:12 -03 2005
O seguinte...
Se eu tivesse um problema desses e com uma consulta dessas eu criaria um
stored procedure.
Já fizemos umas incursões nesse sentido aqui (igual a sua dúvida) e, das
duas uma, ou violavamos alguma regra do SQL do FB e não chegavamos em
nada ou complicavamos demais a consulta (dificultando as manutenções),
eventualmente o programa perdia a conexão com o banco.
Tinhamos consultas complicadas assim para gerar os Registros do Arquivo
Fiscal Magnético e transformamos tudo em stored procedures. Foi a melhor
coisa que fizemos!
É isso aí.
[]'s
Edson
RAMJ SISTEMAS & CONSULTORIA escreveu:
>Tenho a seguinte instrucao Sql
>
>SELECT E.CODPROD
> , E.DESCPROD
> , CASE
> WHEN E.TIPO = 'J' THEN 'JÓIA'
> WHEN E.TIPO = 'B' THEN 'BIJUTERIA'
> END AS DESCTIPO
> , E.MATPRIMA
> , CASE
> WHEN E.MATPRIMA = 'M' THEN 'MATÉRIA-PRIMA'
> WHEN E.MATPRIMA = 'F' THEN 'PRODUTO FINAL'
> END AS DESCMATPRIMA
> , E.CODBARRA
> , E.PESO
> , E.MARGEM
> , E.CUSTO
> , E.PRECO01
> , E.PRECO02
> , E.FOTO
> , E.CODCOLECAO
> , A.DESCCOLECAO
> , E.CODGRUPO
> , B.DESCGRUPO
> , E.TIPO
> , C.DATAOCORR
> , CASE
> WHEN E.TIPO = 'J' THEN
>(((C.VLROURO/1000)*(B.FATORBANHO+B.FATORSERVICO)+E.CUSTO)*E.PESO)
> END AS CUSTOOURO
> , CASE
> WHEN E.TIPO = 'J' THEN
>((((C.VLROURO/1000)*(B.FATORBANHO+B.FATORSERVICO)+E.CUSTO)*E.PESO)*(E.MARGEM
>/100))+
>
>(((C.VLROURO/1000)*(B.FATORBANHO+B.FATORSERVICO)+E.CUSTO)*E.PESO)
> END AS PRECOOURO
> , CASE
> WHEN E.TIPO = 'J' THEN
>(((C.VLRPRATA/1000)*(B.FATORBANHO+B.FATORSERVICO)+E.CUSTO)*E.PESO)
> END AS CUSTOPRATA
> , CASE
> WHEN E.TIPO = 'J' THEN
>((((C.VLRPRATA/1000)*(B.FATORBANHO+B.FATORSERVICO)+E.CUSTO)*E.PESO)*(E.MARGE
>M/100))+
>
>(((C.VLRPRATA/1000)*(B.FATORBANHO+B.FATORSERVICO)+E.CUSTO)*E.PESO)
> END AS PRECOPRATA
>FROM PRODUTOS E
>LEFT JOIN COLECAO A ON (A.CODCOLECAO = E.CODCOLECAO)
>LEFT JOIN GRUPOS B ON (B.CODGRUPO = E.CODGRUPO)
>LEFT JOIN PRECOBANHO C ON (C.DATAOCORR = DATAOCORR)
>
>Duas Perguntas: 1-> usando o CASE criei um campo chamado CUSTOURO. Como usar
>este campo no case abaixo PRECOOURO. Gostaria que ficasse algo assim: ( se
>for possível é claro )
> , CASE
> WHEN E.TIPO = 'J' THEN (CUSTOOURO*(E.MARGEM/100))+CUSTOOURO
> END AS PRECOOURO
>
>2->Na linha C.DATAOCORR, preciso rotarnar a data maior algo assim:
> , MAX(C.DATAOCORR)
>
>Se alguém puder me ajudar, desde já agradeço
>
>Reuber
>
>
>
>
>
>______________________________________________
>FireBase-BR (www.firebase.com.br) - Hospedado em www.bavs.com.br
>Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
>
>
>
>
Mais detalhes sobre a lista de discussão lista