SELECT
p.tipo_produto_id , ncm.ncm AS ncm , cf.estabelecimento_id , to_char(cf.data_emissao, 'YYYY-MM-DD'::text) AS data_emissao , sum( icf.quantidade * icf.valor_unitario ) AS valor , ( SELECT rt.aliquota FROM regras_tributos rt JOIN tributos t ON t.id = rt.tributo_id WHERE t.sigla = 'PIS'::text AND (rt.tipo_produto = tp.tipo_produto OR rt.tipo_produto = '*'::text) AND rt.cfop = '*'::text ORDER BY rt.prioridade LIMIT 1) AS pis , ( SELECT rt.aliquota FROM regras_tributos rt JOIN tributos t ON t.id = rt.tributo_id WHERE t.sigla = 'COFINS'::text AND (rt.tipo_produto = tp.tipo_produto OR rt.tipo_produto = '*'::text) AND rt.cfop = '*'::text ORDER BY rt.prioridade LIMIT 1) AS cofins FROM itens_doc_entradas_saidas icf JOIN doc_entradas_saidas cf ON cf.id = icf.documento_id JOIN produtos p ON icf.produto_id = p.id JOIN tipos_produtos tp ON tp.id = p.tipo_produto_id join cfops cfop on cfop.id = icf.cfop_id left join classificacoes_ncm ncm on tp.ncm_id = ncm.id WHERE cf.situacao_documento not in ('C','M','X' ) and cf.tipo_emitente = 'P' and cf.tipo_operacao='S' and ((cfop.cfop like '5.102' or cfop.cfop like '5.403' or cfop.cfop like '5.405' ) or (cfop.cfop like '6.1%' or cfop.cfop like '6.40%' )) GROUP BY p.tipo_produto_id, ncm.ncm, tp.tipo_produto, cf.estabelecimento_id, to_char(cf.data_emissao, 'YYYY-MM-DD'::text)union
SELECT p.tipo_produto_id, ncm.ncm AS ncm, ec.estabelecimento_id, to_char(cf.data_emissao, 'YYYY-MM-DD'::text) AS data_emissao, sum(
CASE WHEN cf.valor_desconto_acrescimo <> 0::double precision THEN icf.valor_total + icf.valor_total / (cf.valor_total_mercadorias - cf.valor_desconto_acrescimo) * cf.valor_desconto_acrescimo ELSE icf.valor_total END) AS valor, ( SELECT rt.aliquota FROM regras_tributos rt JOIN tributos t ON t.id = rt.tributo_id WHERE t.sigla = 'PIS'::text AND (rt.tipo_produto = tp.tipo_produto OR rt.tipo_produto = '*'::text) AND rt.cfop = '*'::text ORDER BY rt.prioridade LIMIT 1) AS pis, ( SELECT rt.aliquota FROM regras_tributos rt JOIN tributos t ON t.id = rt.tributo_id WHERE t.sigla = 'COFINS'::text AND (rt.tipo_produto = tp.tipo_produto OR rt.tipo_produto = '*'::text) AND rt.cfop = '*'::text ORDER BY rt.prioridade LIMIT 1) AS cofins FROM itens_cupons_fiscais icf JOIN cupons_fiscais cf ON cf.id = icf.cupom_fiscal_id JOIN produtos p ON icf.produto_id = p.id JOIN tipos_produtos tp ON tp.id = p.tipo_produto_id JOIN ecfs_estabelecimentos ec ON ec.id = cf.ecf_estabelecimento_id left join classificacoes_ncm ncm on tp.ncm_id = ncm.id WHERE icf.situacao::text = 'N'::text AND cf.situacao::text = 'E'::text GROUP BY p.tipo_produto_id, ncm.ncm, tp.tipo_produto, ec.estabelecimento_id, to_char(cf.data_emissao, 'YYYY-MM-DD'::text)) query
inner join tipos_produtos tprod on tprod.id = query.tipo_produto_id where estabelecimento_id != 1333 and data_emissao between '2011-06-01' and '2011-06-30' group by tprod.tipo_produto, ncm order by total;