Select utilizando Select CASE + INNER JOIN + GRoup BY
Select utilizando Select CASE + INNER JOIN + GRoup BY
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
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
Curtidas 0
Melhor post
Emerson Nascimento
13/03/2019
Quando você utiliza GROUP BY, você precisa utilizar funções de agregação nos campos apresentados e que não fazem parte do GROUP BY.
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:
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.
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.
GOSTEI 2
Mais Respostas
Ana Lichirgu
12/03/2019
Bom dia! Acredito que a sintaxe do case esteja incorreta...
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!
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!
GOSTEI 0
Mayara Mattos
12/03/2019
Bom dia,
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.
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.
GOSTEI 0
Mayara Mattos
12/03/2019
Emerson Nascimento,
Deu certinho, muito Obrigada!
Sobre o Case o sistema é fechado, não me deixa criar tabelas nele :(
Me ajudou demais!
Deu certinho, muito Obrigada!
Sobre o Case o sistema é fechado, não me deixa criar tabelas nele :(
Me ajudou demais!
GOSTEI 0