[firebase-br] Select para varios ICMS

Eduardo Pombo eduardo em embras.net
Sex Mar 19 18:59:12 -03 2010


acredito que a solucao seja algo simples, usando o LEFT JOIN e nao o
INNER e colocando um oin para cada caso de base e aliquota que desejar
seguinto o formato abaixo:


select
 NOTAENTRADA.DATAENTRADA,
 SUBSTRING(NOTAENTRADA.NUMERODOCUMENTO FROM 1 FOR 2) AS SERIE,
 SUBSTRING(NOTAENTRADA.NUMERODOCUMENTO FROM 3 FOR 8) AS NUMERO,

 PROD1.BASEICMSINFORMADO AS BASE1,
 PROD2.BASEICMSINFORMADO AS BASE2,
 PROD3.BASEICMSINFORMADO AS BASE3,
 PROD4.BASEICMSINFORMADO AS BASE4,
 PROD5.BASEICMSINFORMADO AS BASE5,

 PROD1.ALIQUOTAICMS1,
 PROD2.ALIQUOTAICMS2,
 PROD3.ALIQUOTAICMS3,
 PROD4.ALIQUOTAICMS4,
 PROD5.ALIQUOTAICMS5

FROM NOTAENTRADA

LEFT JOIN PRODNOTAENTRADA PROD_01 ON
(NOTAENTRADA.CODIGONOTAENTRADA=PROD_01.CODIGONOTAENTRADA AND
PROD_01.BASEICMS = 01)

LEFT JOIN PRODNOTAENTRADA PROD_02 ON
(NOTAENTRADA.CODIGONOTAENTRADA=PROD_02.CODIGONOTAENTRADA AND
PROD_02.BASEICMS = 02)

LEFT JOIN PRODNOTAENTRADA PROD_03 ON
(NOTAENTRADA.CODIGONOTAENTRADA=PROD_03.CODIGONOTAENTRADA AND
PROD_03.BASEICMS = 03)

LEFT JOIN PRODNOTAENTRADA PROD_04 ON
(NOTAENTRADA.CODIGONOTAENTRADA=PROD_04.CODIGONOTAENTRADA AND
PROD_04.BASEICMS = 04)

LEFT JOIN PRODNOTAENTRADA PROD_05 ON
(NOTAENTRADA.CODIGONOTAENTRADA=PROD_05.CODIGONOTAENTRADA AND
PROD_05.BASEICMS = 05)

 WHERE NOTAENTRADA.DATAEMISSAO BETWEEN :DATAINICIO AND :DATAFIM
 ORDER BY NOTAENTRADA.DATAEMISSAO


caso queira apegar apenas o que tenha valor troque de

 PROD1.BASEICMSINFORMADO AS BASE1,
 PROD2.BASEICMSINFORMADO AS BASE2,
 PROD3.BASEICMSINFORMADO AS BASE3,
 PROD4.BASEICMSINFORMADO AS BASE4,
 PROD5.BASEICMSINFORMADO AS BASE5,

para

coalesce(  PROD1.BASEICMSINFORMADO AS BASE1,  PROD2.BASEICMSINFORMADO
AS BASE2,  PROD3.BASEICMSINFORMADO AS BASE3,  PROD4.BASEICMSINFORMADO
AS BASE4,
 PROD5.BASEICMSINFORMADO AS BASE5 ) as BASE

e mesmo para a aliquota.

Espero ter ajudado,



Abracos


Em 18 de março de 2010 16:00, Paulo Moreira da Costa Junior
<juniorpt em gmail.com> escreveu:
> Pessoal eu tenho que criar um select q vai usar duas tabelas: notaentrada e
> prodnotaentrada e eu preciso colocar na query os valores de ICMS dos
> produtos agrupados por categorias, seria algo +/- assim codnota, codproduto,
> baseicms, aliquotaicms, baseicms2, aliquotaicms2,   e assim por diante até a
> baseicms5, cheguei até aqui +/-
>
> SELECT NOTAENTRADA.DATAEMISSAO,
>       NOTAENTRADA.DATAENTRADA,
>       SUBSTRING(NOTAENTRADA.NUMERODOCUMENTO FROM 1 FOR 2) AS SERIE,
>       SUBSTRING(NOTAENTRADA.NUMERODOCUMENTO FROM 3 FOR 8) AS NUMERO,
>       NOTAENTRADA.CODIGONATUREZA,
>       NOTAENTRADA.VALORINFORMADO AS VALOR_CONTABIL,
>       NOTAENTRADA.BASEICMSINFORMADO (SELECT PRODNOTAENTRADA.BASEICMS FROM
> PRODNOTAENTRADA WHERE PRODNOTAENTRADA.BASEICMS = 01)
>       PRODNOTAENTRADA.ALIQUOTAICMS AS ALIQUOTA_ICMS,
>       NOTAENTRADA.ICMSINFORMADO,
>       PRODNOTAENTRADA.ALIQUOTAIPI,
>       NOTAENTRADA.CNPJCPF,
>       PESSOA.PESSOAINSCRICAO,
>       PESSOA.PESSOADESCRICAO,
>       PESSOA.ENDERECOESTADO,
>       NOTAENTRADA.VALORDESCONTO
> FROM NOTAENTRADA
> INNER JOIN PRODNOTAENTRADA ON
> (NOTAENTRADA.CODIGONOTAENTRADA=PRODNOTAENTRADA.CODIGONOTAENTRADA)
> INNER JOIN PESSOA ON (NOTAENTRADA.CNPJCPF=PESSOA.CNPJCPF)
> WHERE NOTAENTRADA.DATAEMISSAO BETWEEN :DATAINICIO AND :DATAFIM
> ORDER BY NOTAENTRADA.DATAEMISSAO
>
> valeu por enquanto
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 

Atenciosamente

José Eduardo Pombo de Barros
Gerente de Manutenção de Sistemas




Mais detalhes sobre a lista de discussão lista