Bom dia Pessoal!
Estou trabalhando em um relátorio do Crystal e estou precisando incluir um campo de uma tabela que não está presente no relatorio.
Pelo que andei lendo, o UNION requer que exista a mesma quantidade e tipo dos campos, mas mesmo assim me gera um erro informando que as colunas devem ser do mesmo tipo.
Segue abaixo a query. A tabela que estou adicionando é a CONHECIMENTO_NOTAFISCAL
SELECT retorno.*,
grupo.nome AS nomegrupo,
empresa.nome AS nomeempresa,
filial.apelido AS apelidofilial,
unidade.descricao AS descricaounidade,
COALESCE(tipodocumento.identificacaolivrofiscal,'') AS tipodoc,
COALESCE(cad_remetente.razaosocial,'') AS remetenterazao,
COALESCE(cad_destinatario.razaosocial,'') AS destinatariorazao,
COALESCE(cad_pagadorfrete.razaosocial,'') AS pagadorfreterazao,
(COALESCE(cad_pagadorfrete.razaosocial,'')||retorno.cnpjcpfcodigopagadorfrete)::varchar AS grupopagador,
fatura_composicao.filial AS faturafilial,
fatura_composicao.unidade AS faturaunidade,
fatura.numero AS numerofatura,
(fatura.numero::TEXT||'/'||fatura.filial::TEXT||'/'||fatura.unidade::TEXT)::VARCHAR AS numerofaturaformatado,
fatura.dtprevisaopagamento,
fatura_pagamento.dtpagamento,
fatura.valorimpressao,
fatura.valorsaldoreceber,
fatura.observacao,
( (CASE WHEN retorno.pagadorfrete = 1 THEN 'Remetente'
WHEN retorno.pagadorfrete = 2 THEN 'Destinatário'
WHEN retorno.pagadorfrete = 3 THEN 'Consignatário'
WHEN retorno.pagadorfrete = 4 THEN 'Redespacho'
END) )::VARCHAR AS pagadorfretetipo
FROM (
SELECT
conhecimento.grupo,
conhecimento.empresa,
conhecimento.filial,
conhecimento.unidade,
'' AS cnpjcpfcodigoemissor,
conhecimento.diferenciadornumero,
conhecimento.serie,
conhecimento.numero,
conhecimento.dtemissao::date AS dtemissao,
conhecimento.tipodocumento,
conhecimento.remetente,
conhecimento.destinatario,
conhecimento.cnpjcpfcodigopagadorfrete,
(SUBSTR(conhecimento.cnpjcpfcodigopagadorfrete,1,8))::varchar AS cnpjpagadorradical,
conhecimento.pagadorfrete,
conhecimento.valortotalprestacao,
conhecimento.numero::VARCHAR AS numerodocumentomostrado
FROM conhecimento
JOIN fatura_composicao ON fatura_composicao.tipodocumentoorigem = conhecimento.tipodocumento
AND fatura_composicao.grupodocumentoorigem = conhecimento.grupo
AND fatura_composicao.empresadocumentoorigem = conhecimento.empresa
AND fatura_composicao.filialdocumentoorigem = conhecimento.filial
AND fatura_composicao.unidadedocumentoorigem = conhecimento.unidade
AND fatura_composicao.diferenciadornumerodocumentoorigem = conhecimento.diferenciadornumero
AND fatura_composicao.seriedocumentoorigem = conhecimento.serie
AND fatura_composicao.numerosequenciadocumentoorigem = conhecimento.numero
JOIN fatura ON fatura.grupo = fatura_composicao.grupo
AND fatura.empresa = fatura_composicao.empresa
AND fatura.filial = fatura_composicao.filial
AND fatura.unidade = fatura_composicao.unidade
AND fatura.sequencia = fatura_composicao.sequencia
LEFT OUTER JOIN fatura_pagamento ON fatura_pagamento.grupo = fatura_composicao.grupo
AND fatura_pagamento.empresa = fatura_composicao.empresa
AND fatura_pagamento.filial = fatura_composicao.filial
AND fatura_pagamento.unidade = fatura_composicao.unidade
AND fatura_pagamento.sequencia = fatura_composicao.sequencia
AND fatura_pagamento.sequenciapagamento = (SELECT fatura_contabilizacao.sequenciafaturapagamento FROM fatura_contabilizacao
WHERE fatura_contabilizacao.grupo = fatura_composicao.grupo
AND fatura_contabilizacao.empresa = fatura_composicao.empresa
AND fatura_contabilizacao.filial = fatura_composicao.filial
AND fatura_contabilizacao.unidade = fatura_composicao.unidade
AND fatura_contabilizacao.sequencia = fatura_composicao.sequencia
AND fatura_contabilizacao.sequenciafaturacomposicao = fatura_composicao.sequenciacomposicao
order by fatura_contabilizacao.sequenciacontabilizacao desc
LIMIT 1)
WHERE conhecimento.grupo = {?Grupo}
AND conhecimento.empresa = {?Empresa}
AND ({?Filial} = 0 OR conhecimento.filial = {?Filial})
AND ({?Unidade} = 0 OR conhecimento.unidade = {?Unidade})
AND (CASE WHEN '{?Status}' = 'Emitidos - Documentos' THEN
(conhecimento.dtemissao::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Faturados Pagos' THEN
(fatura_pagamento.dtpagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Abertos Não Faturados' THEN
(fatura.dtvencimento::date BETWEEN {?DataInicial} AND {?DataFinal})
ELSE
(fatura.dtprevisaopagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
END)
AND (CASE WHEN '{?Radical}' = 'Sim' AND '{?CnpjCpfCodigo}' <> ''
THEN SUBSTR(conhecimento.cnpjcpfcodigopagadorfrete,1,8) = SUBSTR('{?CnpjCpfCodigo}',1,8)
ELSE
('{?CnpjCpfCodigo}' = '' OR conhecimento.cnpjcpfcodigopagadorfrete = '{?CnpjCpfCodigo}')
END)
AND conhecimento.dtcancelamento IS NULL
AND conhecimento.numero < 1000000
AND conhecimento.tipo in(1,4)
AND (conhecimento.emissaoeletronica = 2 OR (conhecimento.emissaoeletronica = 1 AND conhecimento.situacaocte = 3))
UNION ALL
SELECT
recibo.grupo,
recibo.empresa,
recibo.filial,
recibo.unidade,
'' AS cnpjcpfcodigoemissor,
recibo.diferenciadornumero,
recibo.serie,
recibo.numero,
recibo.dtemissao::date AS dtemissao,
recibo.tipodocumento,
recibo.remetente,
recibo.destinatario,
recibo.cnpjcpfcodigopagadorfrete,
(SUBSTR(recibo.cnpjcpfcodigopagadorfrete,1,8))::varchar AS cnpjpagadorradical,
recibo.pagadorfrete,
recibo.valortotalprestacao,
recibo.numero::VARCHAR AS numerodocumentomostrado
FROM recibo
JOIN fatura_composicao ON fatura_composicao.tipodocumentoorigem = recibo.tipodocumento
AND fatura_composicao.grupodocumentoorigem = recibo.grupo
AND fatura_composicao.empresadocumentoorigem = recibo.empresa
AND fatura_composicao.filialdocumentoorigem = recibo.filial
AND fatura_composicao.unidadedocumentoorigem = recibo.unidade
AND fatura_composicao.diferenciadornumerodocumentoorigem = recibo.diferenciadornumero
AND fatura_composicao.seriedocumentoorigem = recibo.serie
AND fatura_composicao.numerosequenciadocumentoorigem = recibo.numero
JOIN fatura ON fatura.grupo = fatura_composicao.grupo
AND fatura.empresa = fatura_composicao.empresa
AND fatura.filial = fatura_composicao.filial
AND fatura.unidade = fatura_composicao.unidade
AND fatura.sequencia = fatura_composicao.sequencia
LEFT OUTER JOIN fatura_pagamento ON fatura_pagamento.grupo = fatura_composicao.grupo
AND fatura_pagamento.empresa = fatura_composicao.empresa
AND fatura_pagamento.filial = fatura_composicao.filial
AND fatura_pagamento.unidade = fatura_composicao.unidade
AND fatura_pagamento.sequencia = fatura_composicao.sequencia
AND fatura_pagamento.sequenciapagamento = (SELECT fatura_contabilizacao.sequenciafaturapagamento FROM fatura_contabilizacao
WHERE fatura_contabilizacao.grupo = fatura_composicao.grupo
AND fatura_contabilizacao.empresa = fatura_composicao.empresa
AND fatura_contabilizacao.filial = fatura_composicao.filial
AND fatura_contabilizacao.unidade = fatura_composicao.unidade
AND fatura_contabilizacao.sequencia = fatura_composicao.sequencia
AND fatura_contabilizacao.sequenciafaturacomposicao = fatura_composicao.sequenciacomposicao
order by fatura_contabilizacao.sequenciacontabilizacao desc
LIMIT 1)
WHERE recibo.grupo = {?Grupo}
AND recibo.empresa = {?Empresa}
AND ({?Filial} = 0 OR recibo.filial = {?Filial})
AND ({?Unidade} = 0 OR recibo.unidade = {?Unidade})
AND (CASE WHEN '{?Status}' = 'Emitidos - Documentos' THEN
(recibo.dtemissao::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Faturados Pagos' THEN
(fatura_pagamento.dtpagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Abertos Não Faturados' THEN
(fatura.dtvencimento::date BETWEEN {?DataInicial} AND {?DataFinal})
ELSE
(fatura.dtprevisaopagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
END)
AND (CASE WHEN '{?Radical}' = 'Sim' AND '{?CnpjCpfCodigo}' <> ''
THEN SUBSTR(recibo.cnpjcpfcodigopagadorfrete,1,8) = SUBSTR('{?CnpjCpfCodigo}',1,8)
ELSE
('{?CnpjCpfCodigo}' = '' OR recibo.cnpjcpfcodigopagadorfrete = '{?CnpjCpfCodigo}')
END)
AND recibo.dtcancelamento IS NULL
AND recibo.numero < 1000000
UNION ALL
SELECT
conhecimento_notafiscal.grupo,
conhecimento_notafiscal.empresa,
conhecimento_notafiscal.filial,
conhecimento_notafiscal.unidade,
'' AS cnpjcpfcodigoemissor,
conhecimento_notafiscal.diferenciadornumero,
conhecimento_notafiscal.serie,
conhecimento_notafiscal.numero,
conhecimento_notafiscal.dtemissao::date AS dtemissao,
conhecimento_notafiscal.dtalt,
conhecimento_notafiscal.dtchegada,
conhecimento_notafiscal.numero as conhecimento,
conhecimento_notafiscal.cnpjcpfcodigoemissor,
(SUBSTR(conhecimento_notafiscal.cnpjcpfcodigoemissor,1,8))::varchar AS cnpjemissorradical,
conhecimento_notafiscal.dtinc,
conhecimento_notafiscal.modelo,
conhecimento_notafiscal.dtentrega,
conhecimento_notafiscal.numeronotafiscal::VARCHAR AS notafiscal
FROM conhecimento_notafiscal
JOIN fatura_composicao ON fatura_composicao.grupodocumentoorigem = conhecimento_notafiscal.grupo
AND fatura_composicao.empresadocumentoorigem = conhecimento_notafiscal.empresa
AND fatura_composicao.filialdocumentoorigem = conhecimento_notafiscal.filial
AND fatura_composicao.unidadedocumentoorigem = conhecimento_notafiscal.unidade
AND fatura_composicao.diferenciadornumerodocumentoorigem = conhecimento_notafiscal.diferenciadornumero
AND fatura_composicao.seriedocumentoorigem = conhecimento_notafiscal.serie
AND fatura_composicao.numerosequenciadocumentoorigem = conhecimento_notafiscal.numero
JOIN fatura ON fatura.grupo = fatura_composicao.grupo
AND fatura.empresa = fatura_composicao.empresa
AND fatura.filial = fatura_composicao.filial
AND fatura.unidade = fatura_composicao.unidade
AND fatura.sequencia = fatura_composicao.sequencia
LEFT OUTER JOIN fatura_pagamento ON fatura_pagamento.grupo = fatura_composicao.grupo
AND fatura_pagamento.empresa = fatura_composicao.empresa
AND fatura_pagamento.filial = fatura_composicao.filial
AND fatura_pagamento.unidade = fatura_composicao.unidade
AND fatura_pagamento.sequencia = fatura_composicao.sequencia
AND fatura_pagamento.sequenciapagamento = (SELECT fatura_contabilizacao.sequenciafaturapagamento FROM fatura_contabilizacao
WHERE fatura_contabilizacao.grupo = fatura_composicao.grupo
AND fatura_contabilizacao.empresa = fatura_composicao.empresa
AND fatura_contabilizacao.filial = fatura_composicao.filial
AND fatura_contabilizacao.unidade = fatura_composicao.unidade
AND fatura_contabilizacao.sequencia = fatura_composicao.sequencia
AND fatura_contabilizacao.sequenciafaturacomposicao = fatura_composicao.sequenciacomposicao
order by fatura_contabilizacao.sequenciacontabilizacao desc
LIMIT 1)
WHERE conhecimento_notafiscal.grupo = {?Grupo}
AND conhecimento_notafiscal.empresa = {?Empresa}
AND ({?Filial} = 0 OR conhecimento_notafiscal.filial = {?Filial})
AND ({?Unidade} = 0 OR conhecimento_notafiscal.unidade = {?Unidade})
AND (CASE WHEN '{?Status}' = 'Emitidos - Documentos' THEN
(conhecimento_notafiscal.dtemissao::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Faturados Pagos' THEN
(fatura_pagamento.dtpagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Abertos Não Faturados' THEN
(fatura.dtvencimento::date BETWEEN {?DataInicial} AND {?DataFinal})
ELSE
(fatura.dtprevisaopagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
END)
AND (CASE WHEN '{?Radical}' = 'Sim' AND '{?CnpjCpfCodigo}' <> ''
THEN SUBSTR(conhecimento_notafiscal.cnpjcpfcodigoemissor,1,8) = SUBSTR('{?CnpjCpfCodigo}',1,8)
ELSE
('{?CnpjCpfCodigo}' = '' OR conhecimento_notafiscal.cnpjcpfcodigoemissor = '{?CnpjCpfCodigo}')
END)
AND Conhecimento_notafiscal.dtchegada IS NOT NULL
AND conhecimento_notafiscal.numero < 1000000
UNION ALL
SELECT
notafiscalservico.grupo,
notafiscalservico.empresa,
notafiscalservico.filial,
notafiscalservico.unidade,
''::VARCHAR AS cnpjcpfcodigoemissor,
notafiscalservico.diferenciadornumero,
notafiscalservico.serie,
notafiscalservico.numero,
notafiscalservico.dtemissao::date AS dtemissao,
notafiscalservico.tipodocumento,
notafiscalservico_calculofrete.remetente,
notafiscalservico_calculofrete.destinatario,
notafiscalservico.cnpjcpfcodigo AS cnpjcpfcodigopagadorfrete,
(SUBSTR(notafiscalservico.cnpjcpfcodigo,1,8))::varchar AS cnpjpagadorradical,
(CASE WHEN notafiscalservico.cnpjcpfcodigo = notafiscalservico_calculofrete.remetente THEN 1
WHEN notafiscalservico.cnpjcpfcodigo = notafiscalservico_calculofrete.destinatario THEN 2
WHEN notafiscalservico.cnpjcpfcodigo = notafiscalservico_calculofrete.consignatario THEN 3
ELSE 1
END) AS pagadorfrete,
notafiscalservico.valortotalliquido,
(CASE WHEN notafiscalservico.numeronfse IS NOT NULL THEN
notafiscalservico.numeronfse
ELSE
notafiscalservico.numero::VARCHAR
END)::VARCHAR AS numerodocumentomostrado
FROM notafiscalservico
LEFT JOIN notafiscalservico_calculofrete USING(grupo,empresa,filial,unidade,diferenciadornumero,serie,numero)
JOIN fatura_composicao ON fatura_composicao.tipodocumentoorigem = notafiscalservico.tipodocumento
AND fatura_composicao.grupodocumentoorigem = notafiscalservico.grupo
AND fatura_composicao.empresadocumentoorigem = notafiscalservico.empresa
AND fatura_composicao.filialdocumentoorigem = notafiscalservico.filial
AND fatura_composicao.unidadedocumentoorigem = notafiscalservico.unidade
AND fatura_composicao.diferenciadornumerodocumentoorigem = notafiscalservico.diferenciadornumero
AND fatura_composicao.seriedocumentoorigem = notafiscalservico.serie
AND fatura_composicao.numerosequenciadocumentoorigem = notafiscalservico.numero
JOIN fatura ON fatura.grupo = fatura_composicao.grupo
AND fatura.empresa = fatura_composicao.empresa
AND fatura.filial = fatura_composicao.filial
AND fatura.unidade = fatura_composicao.unidade
AND fatura.sequencia = fatura_composicao.sequencia
LEFT OUTER JOIN fatura_pagamento ON fatura_pagamento.grupo = fatura_composicao.grupo
AND fatura_pagamento.empresa = fatura_composicao.empresa
AND fatura_pagamento.filial = fatura_composicao.filial
AND fatura_pagamento.unidade = fatura_composicao.unidade
AND fatura_pagamento.sequencia = fatura_composicao.sequencia
AND fatura_pagamento.sequenciapagamento = (SELECT fatura_contabilizacao.sequenciafaturapagamento FROM fatura_contabilizacao
WHERE fatura_contabilizacao.grupo = fatura_composicao.grupo
AND fatura_contabilizacao.empresa = fatura_composicao.empresa
AND fatura_contabilizacao.filial = fatura_composicao.filial
AND fatura_contabilizacao.unidade = fatura_composicao.unidade
AND fatura_contabilizacao.sequencia = fatura_composicao.sequencia
AND fatura_contabilizacao.sequenciafaturacomposicao = fatura_composicao.sequenciacomposicao
order by fatura_contabilizacao.sequenciacontabilizacao desc
LIMIT 1)
WHERE notafiscalservico.grupo = {?Grupo}
AND notafiscalservico.empresa = {?Empresa}
AND ({?Filial} = 0 OR notafiscalservico.filial = {?Filial})
AND ({?Unidade} = 0 OR notafiscalservico.unidade = {?Unidade})
AND (CASE WHEN '{?Status}' = 'Emitidos - Documentos' THEN
(notafiscalservico.dtemissao::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Faturados Pagos' THEN
(fatura_pagamento.dtpagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Abertos Não Faturados' THEN
(fatura.dtvencimento::date BETWEEN {?DataInicial} AND {?DataFinal})
ELSE
(fatura.dtprevisaopagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
END)
AND (CASE WHEN '{?Radical}' = 'Sim' AND '{?CnpjCpfCodigo}' <> ''
THEN SUBSTR(notafiscalservico.cnpjcpfcodigo,1,8) = SUBSTR('{?CnpjCpfCodigo}',1,8)
ELSE
('{?CnpjCpfCodigo}' = '' OR notafiscalservico.cnpjcpfcodigo = '{?CnpjCpfCodigo}')
END)
AND notafiscalservico.dtcancelamento IS NULL
AND notafiscalservico.numero < 1000000
AND (notafiscalservico.emissaoeletronica = 2 OR (notafiscalservico.emissaoeletronica = 1 AND notafiscalservico.situacaonfse = 3))
UNION ALL
SELECT
redespacho.grupo,
redespacho.empresa,
redespacho.filial,
redespacho.unidade,
redespacho.cnpjcpfcodigoemissor,
1 AS diferenciadornumero,
redespacho.serie,
redespacho.numero,
redespacho.dtemissao,
redespacho.tipodocumento,
redespacho.remetente,
redespacho.destinatario,
redespacho.cnpjcpfcodigopagadorfrete,
(SUBSTR(redespacho.cnpjcpfcodigopagadorfrete,1,8))::varchar AS cnpjpagadorradical,
redespacho.pagadorfrete,
redespacho.valortotalprestacao,
redespacho.numero::VARCHAR AS numerodocumentomostrado
FROM redespacho
JOIN fatura_composicao ON fatura_composicao.tipodocumentoorigem = redespacho.tipodocumento
AND fatura_composicao.grupodocumentoorigem = redespacho.grupo
AND fatura_composicao.empresadocumentoorigem = redespacho.empresa
AND fatura_composicao.cnpjcpfcodigoemissordocumentoorigem = redespacho.cnpjcpfcodigoemissor
AND CAST(fatura_composicao.dtemissaodocumentoorigem AS date) = redespacho.dtemissao
AND fatura_composicao.seriedocumentoorigem = redespacho.serie
AND fatura_composicao.numerosequenciadocumentoorigem = redespacho.numero
JOIN fatura ON fatura.grupo = fatura_composicao.grupo
AND fatura.empresa = fatura_composicao.empresa
AND fatura.filial = fatura_composicao.filial
AND fatura.unidade = fatura_composicao.unidade
AND fatura.sequencia = fatura_composicao.sequencia
LEFT OUTER JOIN fatura_pagamento ON fatura_pagamento.grupo = fatura_composicao.grupo
AND fatura_pagamento.empresa = fatura_composicao.empresa
AND fatura_pagamento.filial = fatura_composicao.filial
AND fatura_pagamento.unidade = fatura_composicao.unidade
AND fatura_pagamento.sequencia = fatura_composicao.sequencia
AND fatura_pagamento.sequenciapagamento = (SELECT fatura_contabilizacao.sequenciafaturapagamento FROM fatura_contabilizacao
WHERE fatura_contabilizacao.grupo = fatura_composicao.grupo
AND fatura_contabilizacao.empresa = fatura_composicao.empresa
AND fatura_contabilizacao.filial = fatura_composicao.filial
AND fatura_contabilizacao.unidade = fatura_composicao.unidade
AND fatura_contabilizacao.sequencia = fatura_composicao.sequencia
AND fatura_contabilizacao.sequenciafaturacomposicao = fatura_composicao.sequenciacomposicao
order by fatura_contabilizacao.sequenciacontabilizacao desc
LIMIT 1)
WHERE redespacho.grupo = {?Grupo}
AND redespacho.empresa = {?Empresa}
AND ({?Filial} = 0 OR redespacho.filial = {?Filial})
AND ({?Unidade} = 0 OR redespacho.unidade = {?Unidade})
AND (CASE WHEN '{?Status}' = 'Emitidos - Documentos' THEN
(redespacho.dtemissao::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Faturados Pagos' THEN
(fatura_pagamento.dtpagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Abertos Não Faturados' THEN
(fatura.dtvencimento::date BETWEEN {?DataInicial} AND {?DataFinal})
ELSE
(fatura.dtprevisaopagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
END)
AND (CASE WHEN '{?Radical}' = 'Sim' AND '{?CnpjCpfCodigo}' <> ''
THEN SUBSTR(redespacho.cnpjcpfcodigopagadorfrete,1,8) = SUBSTR('{?CnpjCpfCodigo}',1,8)
ELSE
('{?CnpjCpfCodigo}' = '' OR redespacho.cnpjcpfcodigopagadorfrete = '{?CnpjCpfCodigo}')
END)
AND redespacho.numero < 1000000) retorno
JOIN grupo ON grupo.codigo = retorno.grupo
JOIN empresa ON empresa.grupo = retorno.grupo AND empresa.codigo = retorno.empresa
LEFT OUTER JOIN filial ON filial.grupo = retorno.grupo
AND filial.empresa = retorno.empresa
AND filial.codigo = retorno.filial
LEFT OUTER JOIN unidade ON unidade.grupo = retorno.grupo
AND unidade.empresa = retorno.empresa
AND unidade.filial = retorno.filial
AND unidade.codigo = retorno.unidade
LEFT OUTER JOIN cadastro cad_remetente ON cad_remetente.codigo = retorno.remetente
LEFT OUTER JOIN cadastro cad_destinatario ON cad_destinatario.codigo = retorno.destinatario
LEFT OUTER JOIN cadastro cad_pagadorfrete ON cad_pagadorfrete.codigo = retorno.cnpjcpfcodigopagadorfrete
LEFT OUTER JOIN tipodocumento ON tipodocumento.codigo = retorno.tipodocumento
LEFT OUTER JOIN fatura_composicao ON fatura_composicao.tipodocumentoorigem = retorno.tipodocumento
AND fatura_composicao.grupodocumentoorigem = retorno.grupo
AND fatura_composicao.empresadocumentoorigem = retorno.empresa
AND fatura_composicao.filialdocumentoorigem = retorno.filial
AND fatura_composicao.unidadedocumentoorigem = retorno.unidade
AND (CASE WHEN retorno.tipodocumento = 11 THEN fatura_composicao.cnpjcpfcodigoemissordocumentoorigem = retorno.cnpjcpfcodigoemissor
ELSE TRUE
END)
AND (CASE WHEN retorno.tipodocumento <> 11 THEN fatura_composicao.diferenciadornumerodocumentoorigem = retorno.diferenciadornumero
ELSE TRUE
END)
AND fatura_composicao.seriedocumentoorigem = retorno.serie
AND fatura_composicao.numerosequenciadocumentoorigem = retorno.numero
AND (CASE WHEN retorno.tipodocumento = 11 THEN fatura_composicao.dtemissaodocumentoorigem::date = retorno.dtemissao
ELSE TRUE
END)
LEFT OUTER JOIN fatura ON fatura.grupo = fatura_composicao.grupo
AND fatura.empresa = fatura_composicao.empresa
AND fatura.filial = fatura_composicao.filial
AND fatura.unidade = fatura_composicao.unidade
AND fatura.sequencia = fatura_composicao.sequencia
LEFT OUTER JOIN fatura_pagamento ON fatura_pagamento.grupo = fatura_composicao.grupo
AND fatura_pagamento.empresa = fatura_composicao.empresa
AND fatura_pagamento.filial = fatura_composicao.filial
AND fatura_pagamento.unidade = fatura_composicao.unidade
AND fatura_pagamento.sequencia = fatura_composicao.sequencia
AND fatura_pagamento.sequenciapagamento = (SELECT fatura_contabilizacao.sequenciafaturapagamento FROM fatura_contabilizacao
WHERE fatura_contabilizacao.grupo = fatura_composicao.grupo
AND fatura_contabilizacao.empresa = fatura_composicao.empresa
AND fatura_contabilizacao.filial = fatura_composicao.filial
AND fatura_contabilizacao.unidade = fatura_composicao.unidade
AND fatura_contabilizacao.sequencia = fatura_composicao.sequencia
AND fatura_contabilizacao.sequenciafaturacomposicao = fatura_composicao.sequenciacomposicao
order by fatura_contabilizacao.sequenciacontabilizacao desc
LIMIT 1)
WHERE
(CASE WHEN '{?Status}' = 'Abertos Não Faturados' THEN
fatura.composicao = 2
WHEN '{?Status}' = 'Faturados Abertos' THEN
fatura.composicao = 1
AND fatura_composicao.valorpendentecnpjcliente > 0
AND fatura_pagamento.dtpagamento IS NULL
WHEN '{?Status}' = 'Faturados Pagos' THEN
fatura.composicao = 1
AND fatura_composicao.valorpendentecnpjcliente = 0
AND fatura_pagamento.dtpagamento IS NOT NULL
WHEN '{?Status}' = 'Emitidos - Documentos' THEN 1=1 END)
ORDER BY retorno.numero,
(CASE WHEN '{?Status}' = 'Abertos Não Faturados' THEN fatura.dtvencimento
WHEN '{?Status}' = 'Faturados Abertos' THEN fatura.dtprevisaopagamento
WHEN '{?Status}' = 'Faturados Pagos' THEN fatura.dtpagamento
WHEN '{?Status}' = 'Emitidos - Documentos' THEN retorno.dtemissao
END)
Pergunta
leo.bolsoni
Bom dia Pessoal!
Estou trabalhando em um relátorio do Crystal e estou precisando incluir um campo de uma tabela que não está presente no relatorio.
Pelo que andei lendo, o UNION requer que exista a mesma quantidade e tipo dos campos, mas mesmo assim me gera um erro informando que as colunas devem ser do mesmo tipo.
Segue abaixo a query. A tabela que estou adicionando é a CONHECIMENTO_NOTAFISCAL
SELECT retorno.*,
grupo.nome AS nomegrupo,
empresa.nome AS nomeempresa,
filial.apelido AS apelidofilial,
unidade.descricao AS descricaounidade,
COALESCE(tipodocumento.identificacaolivrofiscal,'') AS tipodoc,
COALESCE(cad_remetente.razaosocial,'') AS remetenterazao,
COALESCE(cad_destinatario.razaosocial,'') AS destinatariorazao,
COALESCE(cad_pagadorfrete.razaosocial,'') AS pagadorfreterazao,
(COALESCE(cad_pagadorfrete.razaosocial,'')||retorno.cnpjcpfcodigopagadorfrete)::varchar AS grupopagador,
fatura_composicao.filial AS faturafilial,
fatura_composicao.unidade AS faturaunidade,
fatura.numero AS numerofatura,
(fatura.numero::TEXT||'/'||fatura.filial::TEXT||'/'||fatura.unidade::TEXT)::VARCHAR AS numerofaturaformatado,
fatura.dtprevisaopagamento,
fatura_pagamento.dtpagamento,
fatura.valorimpressao,
fatura.valorsaldoreceber,
fatura.observacao,
( (CASE WHEN retorno.pagadorfrete = 1 THEN 'Remetente'
WHEN retorno.pagadorfrete = 2 THEN 'Destinatário'
WHEN retorno.pagadorfrete = 3 THEN 'Consignatário'
WHEN retorno.pagadorfrete = 4 THEN 'Redespacho'
END) )::VARCHAR AS pagadorfretetipo
FROM (
SELECT
conhecimento.grupo,
conhecimento.empresa,
conhecimento.filial,
conhecimento.unidade,
'' AS cnpjcpfcodigoemissor,
conhecimento.diferenciadornumero,
conhecimento.serie,
conhecimento.numero,
conhecimento.dtemissao::date AS dtemissao,
conhecimento.tipodocumento,
conhecimento.remetente,
conhecimento.destinatario,
conhecimento.cnpjcpfcodigopagadorfrete,
(SUBSTR(conhecimento.cnpjcpfcodigopagadorfrete,1,8))::varchar AS cnpjpagadorradical,
conhecimento.pagadorfrete,
conhecimento.valortotalprestacao,
conhecimento.numero::VARCHAR AS numerodocumentomostrado
FROM conhecimento
JOIN fatura_composicao ON fatura_composicao.tipodocumentoorigem = conhecimento.tipodocumento
AND fatura_composicao.grupodocumentoorigem = conhecimento.grupo
AND fatura_composicao.empresadocumentoorigem = conhecimento.empresa
AND fatura_composicao.filialdocumentoorigem = conhecimento.filial
AND fatura_composicao.unidadedocumentoorigem = conhecimento.unidade
AND fatura_composicao.diferenciadornumerodocumentoorigem = conhecimento.diferenciadornumero
AND fatura_composicao.seriedocumentoorigem = conhecimento.serie
AND fatura_composicao.numerosequenciadocumentoorigem = conhecimento.numero
JOIN fatura ON fatura.grupo = fatura_composicao.grupo
AND fatura.empresa = fatura_composicao.empresa
AND fatura.filial = fatura_composicao.filial
AND fatura.unidade = fatura_composicao.unidade
AND fatura.sequencia = fatura_composicao.sequencia
LEFT OUTER JOIN fatura_pagamento ON fatura_pagamento.grupo = fatura_composicao.grupo
AND fatura_pagamento.empresa = fatura_composicao.empresa
AND fatura_pagamento.filial = fatura_composicao.filial
AND fatura_pagamento.unidade = fatura_composicao.unidade
AND fatura_pagamento.sequencia = fatura_composicao.sequencia
AND fatura_pagamento.sequenciapagamento = (SELECT fatura_contabilizacao.sequenciafaturapagamento FROM fatura_contabilizacao
WHERE fatura_contabilizacao.grupo = fatura_composicao.grupo
AND fatura_contabilizacao.empresa = fatura_composicao.empresa
AND fatura_contabilizacao.filial = fatura_composicao.filial
AND fatura_contabilizacao.unidade = fatura_composicao.unidade
AND fatura_contabilizacao.sequencia = fatura_composicao.sequencia
AND fatura_contabilizacao.sequenciafaturacomposicao = fatura_composicao.sequenciacomposicao
order by fatura_contabilizacao.sequenciacontabilizacao desc
LIMIT 1)
WHERE conhecimento.grupo = {?Grupo}
AND conhecimento.empresa = {?Empresa}
AND ({?Filial} = 0 OR conhecimento.filial = {?Filial})
AND ({?Unidade} = 0 OR conhecimento.unidade = {?Unidade})
AND (CASE WHEN '{?Status}' = 'Emitidos - Documentos' THEN
(conhecimento.dtemissao::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Faturados Pagos' THEN
(fatura_pagamento.dtpagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Abertos Não Faturados' THEN
(fatura.dtvencimento::date BETWEEN {?DataInicial} AND {?DataFinal})
ELSE
(fatura.dtprevisaopagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
END)
AND (CASE WHEN '{?Radical}' = 'Sim' AND '{?CnpjCpfCodigo}' <> ''
THEN SUBSTR(conhecimento.cnpjcpfcodigopagadorfrete,1,8) = SUBSTR('{?CnpjCpfCodigo}',1,8)
ELSE
('{?CnpjCpfCodigo}' = '' OR conhecimento.cnpjcpfcodigopagadorfrete = '{?CnpjCpfCodigo}')
END)
AND conhecimento.dtcancelamento IS NULL
AND conhecimento.numero < 1000000
AND conhecimento.tipo in(1,4)
AND (conhecimento.emissaoeletronica = 2 OR (conhecimento.emissaoeletronica = 1 AND conhecimento.situacaocte = 3))
UNION ALL
SELECT
recibo.grupo,
recibo.empresa,
recibo.filial,
recibo.unidade,
'' AS cnpjcpfcodigoemissor,
recibo.diferenciadornumero,
recibo.serie,
recibo.numero,
recibo.dtemissao::date AS dtemissao,
recibo.tipodocumento,
recibo.remetente,
recibo.destinatario,
recibo.cnpjcpfcodigopagadorfrete,
(SUBSTR(recibo.cnpjcpfcodigopagadorfrete,1,8))::varchar AS cnpjpagadorradical,
recibo.pagadorfrete,
recibo.valortotalprestacao,
recibo.numero::VARCHAR AS numerodocumentomostrado
FROM recibo
JOIN fatura_composicao ON fatura_composicao.tipodocumentoorigem = recibo.tipodocumento
AND fatura_composicao.grupodocumentoorigem = recibo.grupo
AND fatura_composicao.empresadocumentoorigem = recibo.empresa
AND fatura_composicao.filialdocumentoorigem = recibo.filial
AND fatura_composicao.unidadedocumentoorigem = recibo.unidade
AND fatura_composicao.diferenciadornumerodocumentoorigem = recibo.diferenciadornumero
AND fatura_composicao.seriedocumentoorigem = recibo.serie
AND fatura_composicao.numerosequenciadocumentoorigem = recibo.numero
JOIN fatura ON fatura.grupo = fatura_composicao.grupo
AND fatura.empresa = fatura_composicao.empresa
AND fatura.filial = fatura_composicao.filial
AND fatura.unidade = fatura_composicao.unidade
AND fatura.sequencia = fatura_composicao.sequencia
LEFT OUTER JOIN fatura_pagamento ON fatura_pagamento.grupo = fatura_composicao.grupo
AND fatura_pagamento.empresa = fatura_composicao.empresa
AND fatura_pagamento.filial = fatura_composicao.filial
AND fatura_pagamento.unidade = fatura_composicao.unidade
AND fatura_pagamento.sequencia = fatura_composicao.sequencia
AND fatura_pagamento.sequenciapagamento = (SELECT fatura_contabilizacao.sequenciafaturapagamento FROM fatura_contabilizacao
WHERE fatura_contabilizacao.grupo = fatura_composicao.grupo
AND fatura_contabilizacao.empresa = fatura_composicao.empresa
AND fatura_contabilizacao.filial = fatura_composicao.filial
AND fatura_contabilizacao.unidade = fatura_composicao.unidade
AND fatura_contabilizacao.sequencia = fatura_composicao.sequencia
AND fatura_contabilizacao.sequenciafaturacomposicao = fatura_composicao.sequenciacomposicao
order by fatura_contabilizacao.sequenciacontabilizacao desc
LIMIT 1)
WHERE recibo.grupo = {?Grupo}
AND recibo.empresa = {?Empresa}
AND ({?Filial} = 0 OR recibo.filial = {?Filial})
AND ({?Unidade} = 0 OR recibo.unidade = {?Unidade})
AND (CASE WHEN '{?Status}' = 'Emitidos - Documentos' THEN
(recibo.dtemissao::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Faturados Pagos' THEN
(fatura_pagamento.dtpagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Abertos Não Faturados' THEN
(fatura.dtvencimento::date BETWEEN {?DataInicial} AND {?DataFinal})
ELSE
(fatura.dtprevisaopagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
END)
AND (CASE WHEN '{?Radical}' = 'Sim' AND '{?CnpjCpfCodigo}' <> ''
THEN SUBSTR(recibo.cnpjcpfcodigopagadorfrete,1,8) = SUBSTR('{?CnpjCpfCodigo}',1,8)
ELSE
('{?CnpjCpfCodigo}' = '' OR recibo.cnpjcpfcodigopagadorfrete = '{?CnpjCpfCodigo}')
END)
AND recibo.dtcancelamento IS NULL
AND recibo.numero < 1000000
UNION ALL
SELECT
conhecimento_notafiscal.grupo,
conhecimento_notafiscal.empresa,
conhecimento_notafiscal.filial,
conhecimento_notafiscal.unidade,
'' AS cnpjcpfcodigoemissor,
conhecimento_notafiscal.diferenciadornumero,
conhecimento_notafiscal.serie,
conhecimento_notafiscal.numero,
conhecimento_notafiscal.dtemissao::date AS dtemissao,
conhecimento_notafiscal.dtalt,
conhecimento_notafiscal.dtchegada,
conhecimento_notafiscal.numero as conhecimento,
conhecimento_notafiscal.cnpjcpfcodigoemissor,
(SUBSTR(conhecimento_notafiscal.cnpjcpfcodigoemissor,1,8))::varchar AS cnpjemissorradical,
conhecimento_notafiscal.dtinc,
conhecimento_notafiscal.modelo,
conhecimento_notafiscal.dtentrega,
conhecimento_notafiscal.numeronotafiscal::VARCHAR AS notafiscal
FROM conhecimento_notafiscal
JOIN fatura_composicao ON fatura_composicao.grupodocumentoorigem = conhecimento_notafiscal.grupo
AND fatura_composicao.empresadocumentoorigem = conhecimento_notafiscal.empresa
AND fatura_composicao.filialdocumentoorigem = conhecimento_notafiscal.filial
AND fatura_composicao.unidadedocumentoorigem = conhecimento_notafiscal.unidade
AND fatura_composicao.diferenciadornumerodocumentoorigem = conhecimento_notafiscal.diferenciadornumero
AND fatura_composicao.seriedocumentoorigem = conhecimento_notafiscal.serie
AND fatura_composicao.numerosequenciadocumentoorigem = conhecimento_notafiscal.numero
JOIN fatura ON fatura.grupo = fatura_composicao.grupo
AND fatura.empresa = fatura_composicao.empresa
AND fatura.filial = fatura_composicao.filial
AND fatura.unidade = fatura_composicao.unidade
AND fatura.sequencia = fatura_composicao.sequencia
LEFT OUTER JOIN fatura_pagamento ON fatura_pagamento.grupo = fatura_composicao.grupo
AND fatura_pagamento.empresa = fatura_composicao.empresa
AND fatura_pagamento.filial = fatura_composicao.filial
AND fatura_pagamento.unidade = fatura_composicao.unidade
AND fatura_pagamento.sequencia = fatura_composicao.sequencia
AND fatura_pagamento.sequenciapagamento = (SELECT fatura_contabilizacao.sequenciafaturapagamento FROM fatura_contabilizacao
WHERE fatura_contabilizacao.grupo = fatura_composicao.grupo
AND fatura_contabilizacao.empresa = fatura_composicao.empresa
AND fatura_contabilizacao.filial = fatura_composicao.filial
AND fatura_contabilizacao.unidade = fatura_composicao.unidade
AND fatura_contabilizacao.sequencia = fatura_composicao.sequencia
AND fatura_contabilizacao.sequenciafaturacomposicao = fatura_composicao.sequenciacomposicao
order by fatura_contabilizacao.sequenciacontabilizacao desc
LIMIT 1)
WHERE conhecimento_notafiscal.grupo = {?Grupo}
AND conhecimento_notafiscal.empresa = {?Empresa}
AND ({?Filial} = 0 OR conhecimento_notafiscal.filial = {?Filial})
AND ({?Unidade} = 0 OR conhecimento_notafiscal.unidade = {?Unidade})
AND (CASE WHEN '{?Status}' = 'Emitidos - Documentos' THEN
(conhecimento_notafiscal.dtemissao::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Faturados Pagos' THEN
(fatura_pagamento.dtpagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Abertos Não Faturados' THEN
(fatura.dtvencimento::date BETWEEN {?DataInicial} AND {?DataFinal})
ELSE
(fatura.dtprevisaopagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
END)
AND (CASE WHEN '{?Radical}' = 'Sim' AND '{?CnpjCpfCodigo}' <> ''
THEN SUBSTR(conhecimento_notafiscal.cnpjcpfcodigoemissor,1,8) = SUBSTR('{?CnpjCpfCodigo}',1,8)
ELSE
('{?CnpjCpfCodigo}' = '' OR conhecimento_notafiscal.cnpjcpfcodigoemissor = '{?CnpjCpfCodigo}')
END)
AND Conhecimento_notafiscal.dtchegada IS NOT NULL
AND conhecimento_notafiscal.numero < 1000000
UNION ALL
SELECT
notafiscalservico.grupo,
notafiscalservico.empresa,
notafiscalservico.filial,
notafiscalservico.unidade,
''::VARCHAR AS cnpjcpfcodigoemissor,
notafiscalservico.diferenciadornumero,
notafiscalservico.serie,
notafiscalservico.numero,
notafiscalservico.dtemissao::date AS dtemissao,
notafiscalservico.tipodocumento,
notafiscalservico_calculofrete.remetente,
notafiscalservico_calculofrete.destinatario,
notafiscalservico.cnpjcpfcodigo AS cnpjcpfcodigopagadorfrete,
(SUBSTR(notafiscalservico.cnpjcpfcodigo,1,8))::varchar AS cnpjpagadorradical,
(CASE WHEN notafiscalservico.cnpjcpfcodigo = notafiscalservico_calculofrete.remetente THEN 1
WHEN notafiscalservico.cnpjcpfcodigo = notafiscalservico_calculofrete.destinatario THEN 2
WHEN notafiscalservico.cnpjcpfcodigo = notafiscalservico_calculofrete.consignatario THEN 3
ELSE 1
END) AS pagadorfrete,
notafiscalservico.valortotalliquido,
(CASE WHEN notafiscalservico.numeronfse IS NOT NULL THEN
notafiscalservico.numeronfse
ELSE
notafiscalservico.numero::VARCHAR
END)::VARCHAR AS numerodocumentomostrado
FROM notafiscalservico
LEFT JOIN notafiscalservico_calculofrete USING(grupo,empresa,filial,unidade,diferenciadornumero,serie,numero)
JOIN fatura_composicao ON fatura_composicao.tipodocumentoorigem = notafiscalservico.tipodocumento
AND fatura_composicao.grupodocumentoorigem = notafiscalservico.grupo
AND fatura_composicao.empresadocumentoorigem = notafiscalservico.empresa
AND fatura_composicao.filialdocumentoorigem = notafiscalservico.filial
AND fatura_composicao.unidadedocumentoorigem = notafiscalservico.unidade
AND fatura_composicao.diferenciadornumerodocumentoorigem = notafiscalservico.diferenciadornumero
AND fatura_composicao.seriedocumentoorigem = notafiscalservico.serie
AND fatura_composicao.numerosequenciadocumentoorigem = notafiscalservico.numero
JOIN fatura ON fatura.grupo = fatura_composicao.grupo
AND fatura.empresa = fatura_composicao.empresa
AND fatura.filial = fatura_composicao.filial
AND fatura.unidade = fatura_composicao.unidade
AND fatura.sequencia = fatura_composicao.sequencia
LEFT OUTER JOIN fatura_pagamento ON fatura_pagamento.grupo = fatura_composicao.grupo
AND fatura_pagamento.empresa = fatura_composicao.empresa
AND fatura_pagamento.filial = fatura_composicao.filial
AND fatura_pagamento.unidade = fatura_composicao.unidade
AND fatura_pagamento.sequencia = fatura_composicao.sequencia
AND fatura_pagamento.sequenciapagamento = (SELECT fatura_contabilizacao.sequenciafaturapagamento FROM fatura_contabilizacao
WHERE fatura_contabilizacao.grupo = fatura_composicao.grupo
AND fatura_contabilizacao.empresa = fatura_composicao.empresa
AND fatura_contabilizacao.filial = fatura_composicao.filial
AND fatura_contabilizacao.unidade = fatura_composicao.unidade
AND fatura_contabilizacao.sequencia = fatura_composicao.sequencia
AND fatura_contabilizacao.sequenciafaturacomposicao = fatura_composicao.sequenciacomposicao
order by fatura_contabilizacao.sequenciacontabilizacao desc
LIMIT 1)
WHERE notafiscalservico.grupo = {?Grupo}
AND notafiscalservico.empresa = {?Empresa}
AND ({?Filial} = 0 OR notafiscalservico.filial = {?Filial})
AND ({?Unidade} = 0 OR notafiscalservico.unidade = {?Unidade})
AND (CASE WHEN '{?Status}' = 'Emitidos - Documentos' THEN
(notafiscalservico.dtemissao::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Faturados Pagos' THEN
(fatura_pagamento.dtpagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Abertos Não Faturados' THEN
(fatura.dtvencimento::date BETWEEN {?DataInicial} AND {?DataFinal})
ELSE
(fatura.dtprevisaopagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
END)
AND (CASE WHEN '{?Radical}' = 'Sim' AND '{?CnpjCpfCodigo}' <> ''
THEN SUBSTR(notafiscalservico.cnpjcpfcodigo,1,8) = SUBSTR('{?CnpjCpfCodigo}',1,8)
ELSE
('{?CnpjCpfCodigo}' = '' OR notafiscalservico.cnpjcpfcodigo = '{?CnpjCpfCodigo}')
END)
AND notafiscalservico.dtcancelamento IS NULL
AND notafiscalservico.numero < 1000000
AND (notafiscalservico.emissaoeletronica = 2 OR (notafiscalservico.emissaoeletronica = 1 AND notafiscalservico.situacaonfse = 3))
UNION ALL
SELECT
redespacho.grupo,
redespacho.empresa,
redespacho.filial,
redespacho.unidade,
redespacho.cnpjcpfcodigoemissor,
1 AS diferenciadornumero,
redespacho.serie,
redespacho.numero,
redespacho.dtemissao,
redespacho.tipodocumento,
redespacho.remetente,
redespacho.destinatario,
redespacho.cnpjcpfcodigopagadorfrete,
(SUBSTR(redespacho.cnpjcpfcodigopagadorfrete,1,8))::varchar AS cnpjpagadorradical,
redespacho.pagadorfrete,
redespacho.valortotalprestacao,
redespacho.numero::VARCHAR AS numerodocumentomostrado
FROM redespacho
JOIN fatura_composicao ON fatura_composicao.tipodocumentoorigem = redespacho.tipodocumento
AND fatura_composicao.grupodocumentoorigem = redespacho.grupo
AND fatura_composicao.empresadocumentoorigem = redespacho.empresa
AND fatura_composicao.cnpjcpfcodigoemissordocumentoorigem = redespacho.cnpjcpfcodigoemissor
AND CAST(fatura_composicao.dtemissaodocumentoorigem AS date) = redespacho.dtemissao
AND fatura_composicao.seriedocumentoorigem = redespacho.serie
AND fatura_composicao.numerosequenciadocumentoorigem = redespacho.numero
JOIN fatura ON fatura.grupo = fatura_composicao.grupo
AND fatura.empresa = fatura_composicao.empresa
AND fatura.filial = fatura_composicao.filial
AND fatura.unidade = fatura_composicao.unidade
AND fatura.sequencia = fatura_composicao.sequencia
LEFT OUTER JOIN fatura_pagamento ON fatura_pagamento.grupo = fatura_composicao.grupo
AND fatura_pagamento.empresa = fatura_composicao.empresa
AND fatura_pagamento.filial = fatura_composicao.filial
AND fatura_pagamento.unidade = fatura_composicao.unidade
AND fatura_pagamento.sequencia = fatura_composicao.sequencia
AND fatura_pagamento.sequenciapagamento = (SELECT fatura_contabilizacao.sequenciafaturapagamento FROM fatura_contabilizacao
WHERE fatura_contabilizacao.grupo = fatura_composicao.grupo
AND fatura_contabilizacao.empresa = fatura_composicao.empresa
AND fatura_contabilizacao.filial = fatura_composicao.filial
AND fatura_contabilizacao.unidade = fatura_composicao.unidade
AND fatura_contabilizacao.sequencia = fatura_composicao.sequencia
AND fatura_contabilizacao.sequenciafaturacomposicao = fatura_composicao.sequenciacomposicao
order by fatura_contabilizacao.sequenciacontabilizacao desc
LIMIT 1)
WHERE redespacho.grupo = {?Grupo}
AND redespacho.empresa = {?Empresa}
AND ({?Filial} = 0 OR redespacho.filial = {?Filial})
AND ({?Unidade} = 0 OR redespacho.unidade = {?Unidade})
AND (CASE WHEN '{?Status}' = 'Emitidos - Documentos' THEN
(redespacho.dtemissao::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Faturados Pagos' THEN
(fatura_pagamento.dtpagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
WHEN '{?Status}' = 'Abertos Não Faturados' THEN
(fatura.dtvencimento::date BETWEEN {?DataInicial} AND {?DataFinal})
ELSE
(fatura.dtprevisaopagamento::date BETWEEN {?DataInicial} AND {?DataFinal})
END)
AND (CASE WHEN '{?Radical}' = 'Sim' AND '{?CnpjCpfCodigo}' <> ''
THEN SUBSTR(redespacho.cnpjcpfcodigopagadorfrete,1,8) = SUBSTR('{?CnpjCpfCodigo}',1,8)
ELSE
('{?CnpjCpfCodigo}' = '' OR redespacho.cnpjcpfcodigopagadorfrete = '{?CnpjCpfCodigo}')
END)
AND redespacho.numero < 1000000) retorno
JOIN grupo ON grupo.codigo = retorno.grupo
JOIN empresa ON empresa.grupo = retorno.grupo AND empresa.codigo = retorno.empresa
LEFT OUTER JOIN filial ON filial.grupo = retorno.grupo
AND filial.empresa = retorno.empresa
AND filial.codigo = retorno.filial
LEFT OUTER JOIN unidade ON unidade.grupo = retorno.grupo
AND unidade.empresa = retorno.empresa
AND unidade.filial = retorno.filial
AND unidade.codigo = retorno.unidade
LEFT OUTER JOIN cadastro cad_remetente ON cad_remetente.codigo = retorno.remetente
LEFT OUTER JOIN cadastro cad_destinatario ON cad_destinatario.codigo = retorno.destinatario
LEFT OUTER JOIN cadastro cad_pagadorfrete ON cad_pagadorfrete.codigo = retorno.cnpjcpfcodigopagadorfrete
LEFT OUTER JOIN tipodocumento ON tipodocumento.codigo = retorno.tipodocumento
LEFT OUTER JOIN fatura_composicao ON fatura_composicao.tipodocumentoorigem = retorno.tipodocumento
AND fatura_composicao.grupodocumentoorigem = retorno.grupo
AND fatura_composicao.empresadocumentoorigem = retorno.empresa
AND fatura_composicao.filialdocumentoorigem = retorno.filial
AND fatura_composicao.unidadedocumentoorigem = retorno.unidade
AND (CASE WHEN retorno.tipodocumento = 11 THEN fatura_composicao.cnpjcpfcodigoemissordocumentoorigem = retorno.cnpjcpfcodigoemissor
ELSE TRUE
END)
AND (CASE WHEN retorno.tipodocumento <> 11 THEN fatura_composicao.diferenciadornumerodocumentoorigem = retorno.diferenciadornumero
ELSE TRUE
END)
AND fatura_composicao.seriedocumentoorigem = retorno.serie
AND fatura_composicao.numerosequenciadocumentoorigem = retorno.numero
AND (CASE WHEN retorno.tipodocumento = 11 THEN fatura_composicao.dtemissaodocumentoorigem::date = retorno.dtemissao
ELSE TRUE
END)
LEFT OUTER JOIN fatura ON fatura.grupo = fatura_composicao.grupo
AND fatura.empresa = fatura_composicao.empresa
AND fatura.filial = fatura_composicao.filial
AND fatura.unidade = fatura_composicao.unidade
AND fatura.sequencia = fatura_composicao.sequencia
LEFT OUTER JOIN fatura_pagamento ON fatura_pagamento.grupo = fatura_composicao.grupo
AND fatura_pagamento.empresa = fatura_composicao.empresa
AND fatura_pagamento.filial = fatura_composicao.filial
AND fatura_pagamento.unidade = fatura_composicao.unidade
AND fatura_pagamento.sequencia = fatura_composicao.sequencia
AND fatura_pagamento.sequenciapagamento = (SELECT fatura_contabilizacao.sequenciafaturapagamento FROM fatura_contabilizacao
WHERE fatura_contabilizacao.grupo = fatura_composicao.grupo
AND fatura_contabilizacao.empresa = fatura_composicao.empresa
AND fatura_contabilizacao.filial = fatura_composicao.filial
AND fatura_contabilizacao.unidade = fatura_composicao.unidade
AND fatura_contabilizacao.sequencia = fatura_composicao.sequencia
AND fatura_contabilizacao.sequenciafaturacomposicao = fatura_composicao.sequenciacomposicao
order by fatura_contabilizacao.sequenciacontabilizacao desc
LIMIT 1)
WHERE
(CASE WHEN '{?Status}' = 'Abertos Não Faturados' THEN
fatura.composicao = 2
WHEN '{?Status}' = 'Faturados Abertos' THEN
fatura.composicao = 1
AND fatura_composicao.valorpendentecnpjcliente > 0
AND fatura_pagamento.dtpagamento IS NULL
WHEN '{?Status}' = 'Faturados Pagos' THEN
fatura.composicao = 1
AND fatura_composicao.valorpendentecnpjcliente = 0
AND fatura_pagamento.dtpagamento IS NOT NULL
WHEN '{?Status}' = 'Emitidos - Documentos' THEN 1=1 END)
ORDER BY retorno.numero,
(CASE WHEN '{?Status}' = 'Abertos Não Faturados' THEN fatura.dtvencimento
WHEN '{?Status}' = 'Faturados Abertos' THEN fatura.dtprevisaopagamento
WHEN '{?Status}' = 'Faturados Pagos' THEN fatura.dtpagamento
WHEN '{?Status}' = 'Emitidos - Documentos' THEN retorno.dtemissao
END)
Se alguém puder dar alguma dica...
VAleuu!
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.