Select utilizando Select CASE + INNER JOIN + GRoup BY
12/03/2019
0
PRECISO AGRUPAR O RESULTADO POR CODIGOPRODUTO,
CODIGOCFOP E INSCRFEDERAL
está dando erro de função inválida , não contida na função agregada.
Select F.CODIGOPRODUTO PRODUTO ,
Y.DESCRPRODUTO descricao,
F.CODIGOCFOP cfop,
F.QUANTIDADE QUANT,
F.VALORTOTAL valor_produto,
B_B.NOMEPESSOA cliente,
B_B.INSCRFEDERAL INSCRicao,
case tipomedicamento
when 0 then ''''SIMILAR''''
WHEN 1 THEN ''''GENERICO''''
WHEN 2 THEN ''''REFERENCIA'''' END AS MEDICAMENTO ,
CASE CDANTITEM
WHEN ''''OUTROS'''' THEN ''''OUTROS'''' end as MEDICAMENTO_OUTROS ,
case CODIGOGRUPOPRODUTO
WHEN 9 THEN ''''LISTA NEGATIVA ''''
WHEN 10 THEN ''''NEUTRA ''''
WHEN 11 THEN ''''LISTA POSITIVA ''''
WHEN 14 THEN ''''BEBIDAS_ALCOOLICAS ''''
WHEN 15 THEN ''''AGUAS ''''
WHEN 16 THEN ''''OUTRAS_BEBIDAS ''''
WHEN 17 THEN ''''REFRIGERANTES ''''
WHEN 18 THEN ''''CERVEJAS ''''
WHEN 19 THEN ''''CHOPE ''''
WHEN 20 THEN ''''TABACO ''''
WHEN 21 THEN ''''CIMENTO ''''
WHEN 22 THEN ''''COMBUSTIVEIS_E_LUBRIFICANTES ''''
WHEN 23 THEN ''''ENERGIA_ELETRICA ''''
WHEN 24 THEN ''''FERRAMENTAS ''''
WHEN 25 THEN ''''LAMPADAS_REATORES_E_STARTER ''''
WHEN 26 THEN ''''MATERIAIS_DE_CONSTRUCAOO_E_CONGENERES ''''
WHEN 27 THEN ''''MATERIAIS_DE_LIMPEZA ''''
WHEN 28 THEN ''''MATERIAIS_ELETRICOS ''''
WHEN 29 THEN ''''PERFUMARIA ''''
WHEN 30 THEN ''''PAPEIS ''''
WHEN 31 THEN ''''PLASTICOS ''''
WHEN 32 THEN ''''PNEUMATICOS_CAMARAS_DE_AR_E_PROTETORES_DE_BORRACH ''''
WHEN 33 THEN ''''VAREJO ''''
WHEN 34 THEN ''''CARNES_PEIXES ''''
WHEN 35 THEN ''''HORTIFRUT ''''
WHEN 36 THEN ''''PRODUTOS_CERAMICOS ''''
WHEN 37 THEN ''''PERFUMARIA_HIGIENE_PESSOAL_COSMETICOS ''''
WHEN 38 THEN ''''ELETRONICOS_ELETROELETRONICOS_ELETRODOMESTICOS ''''
WHEN 39 THEN ''''RACOES ''''
WHEN 40 THEN ''''SORVETES ''''
WHEN 41 THEN ''''TINTAS_E_VERNIZES ''''
WHEN 42 THEN ''''VEICULOS_AUTOMOTORES ''''
WHEN 43 THEN ''''VIDROS ''''
WHEN 44 THEN ''''PAPELARIA ''''
when 13 then ''''AUTOPECAS '''' END AS SEGMENTACAO
from LCTOFISsaiPRODUTO F
left join Produto Y on (Y.CODIGOEMPRESA = F.CODIGOEMPRESA
and Y.CODIGOPRODUTO = F.CODIGOPRODUTO )
left join LCTOFISsai A on (A.CODIGOEMPRESA = F.CODIGOEMPRESA
and A.CHAVELCTOFISsai = F.CHAVELCTOFISsai and F.DATALCTOFIS=A.DATALCTOFIS)
left join Pessoa B_B on ( B_B.CODIGOPESSOA = A.CODIGOPESSOA)
where F.CODIGOEMPRESA = :Empresa and A.DATALCTOFIS BETWEEN :DATA_INICIAL AND :DATA_FINAL
group by F.codigoproduto , F. codigocfop, B_B.NOMEPESSOA , B_B.INSCRFEDERAL, Y.CDANTITEM
,Y.TIPOMEDICAMENTO, Y.CODIGOGRUPOPRODUTO
Mayara Mattos
Post mais votado
13/03/2019
Na tua instrução você agrupa os campos
F.codigoproduto, F.codigocfop, B_B.NOMEPESSOA, B_B.INSCRFEDERAL,
Y.CDANTITEM, Y.TIPOMEDICAMENTO, Y.CODIGOGRUPOPRODUTO
porém seleciona outros campos e não os agrega.
Deveria ser algo assim:
Select F.CODIGOPRODUTO PRODUTO, MAX(Y.DESCRPRODUTO) descricao, F.CODIGOCFOP cfop, SUM(F.QUANTIDADE) QUANT, SUM(F.VALORTOTAL) valor_produto, B_B.NOMEPESSOA cliente, B_B.INSCRFEDERAL inscricao, case tipomedicamento WHEN 0 THEN 'SIMILAR' WHEN 1 THEN 'GENERICO' WHEN 2 THEN 'REFERENCIA' end AS MEDICAMENTO, CDANTITEM as MEDICAMENTO_OUTROS, case CODIGOGRUPOPRODUTO WHEN 9 THEN 'LISTA NEGATIVA' WHEN 10 THEN 'NEUTRA' WHEN 11 THEN 'LISTA POSITIVA' WHEN 14 THEN 'BEBIDAS_ALCOOLICAS' WHEN 15 THEN 'AGUAS' WHEN 16 THEN 'OUTRAS_BEBIDAS' WHEN 17 THEN 'REFRIGERANTES' WHEN 18 THEN 'CERVEJAS' WHEN 19 THEN 'CHOPE' WHEN 20 THEN 'TABACO' WHEN 21 THEN 'CIMENTO' WHEN 22 THEN 'COMBUSTIVEIS_E_LUBRIFICANTES' WHEN 23 THEN 'ENERGIA_ELETRICA' WHEN 24 THEN 'FERRAMENTAS' WHEN 25 THEN 'LAMPADAS_REATORES_E_STARTER' WHEN 26 THEN 'MATERIAIS_DE_CONSTRUCAOO_E_CONGENERES' WHEN 27 THEN 'MATERIAIS_DE_LIMPEZA' WHEN 28 THEN 'MATERIAIS_ELETRICOS' WHEN 29 THEN 'PERFUMARIA' WHEN 30 THEN 'PAPEIS' WHEN 31 THEN 'PLASTICOS' WHEN 32 THEN 'PNEUMATICOS_CAMARAS_DE_AR_E_PROTETORES_DE_BORRACH' WHEN 33 THEN 'VAREJO' WHEN 34 THEN 'CARNES_PEIXES' WHEN 35 THEN 'HORTIFRUT' WHEN 36 THEN 'PRODUTOS_CERAMICOS' WHEN 37 THEN 'PERFUMARIA_HIGIENE_PESSOAL_COSMETICOS' WHEN 38 THEN 'ELETRONICOS_ELETROELETRONICOS_ELETRODOMESTICOS' WHEN 39 THEN 'RACOES' WHEN 40 THEN 'SORVETES' WHEN 41 THEN 'TINTAS_E_VERNIZES' WHEN 42 THEN 'VEICULOS_AUTOMOTORES' WHEN 43 THEN 'VIDROS' WHEN 44 THEN 'PAPELARIA' WHEN 13 THEN 'AUTOPECAS' end AS SEGMENTACAO from LCTOFISsaiPRODUTO F left join Produto Y on Y.CODIGOEMPRESA = F.CODIGOEMPRESA and Y.CODIGOPRODUTO = F.CODIGOPRODUTO left join LCTOFISsai A on A.CODIGOEMPRESA = F.CODIGOEMPRESA and A.CHAVELCTOFISsai = F.CHAVELCTOFISsai and F.DATALCTOFIS=A.DATALCTOFIS left join Pessoa B_B on B_B.CODIGOPESSOA = A.CODIGOPESSOA where F.CODIGOEMPRESA = :Empresa and A.DATALCTOFIS BETWEEN :DATA_INICIAL AND :DATA_FINAL group by F.codigoproduto, F.codigocfop, B_B.NOMEPESSOA, B_B.INSCRFEDERAL, Y.CDANTITEM, Y.TIPOMEDICAMENTO, Y.CODIGOGRUPOPRODUTO
Note que os campos que NÃO estão no GROUP BY estão sendo agrupados pelas funções MAX() ou SUM().
Uma sugestão: no lugar daquele CASE gigante, crie uma tabela para obter a descrição do grupo do produto.
Emerson Nascimento
Mais Posts
13/03/2019
Ana Lichirgu
Você colocou assim:
CASE CDANTITEM
WHEN ''''OUTROS'''' THEN ''''OUTROS'''' end as MEDICAMENTO_OUTROS ,
O correto seria
CASE WHEN CDANTITEM = ''''OUTROS'''' THEN ''''OUTROS''''
end as MEDICAMENTO_OUTROS
Se tiver mais opções como no segundo case, você coloca WHEN CDANTITEM = ''''123'''' THEN ''''123'''' e finaliza com o end que você colocou...
Espero ter ajudado!
13/03/2019
Mayara Mattos
Na verdade esse Case foi uma forma de buscar uma informação que não tem no sistema, ele está trazendo a informação certa.
Meu problema é que preciso fazer um group by por codigode produto, cfop e cliente.
13/03/2019
Mayara Mattos
Deu certinho, muito Obrigada!
Sobre o Case o sistema é fechado, não me deixa criar tabelas nele :(
Me ajudou demais!
Clique aqui para fazer login e interagir na Comunidade :)