Array
(
)

Erro na clause Group By

Johnny
|
MVP
    27 fev 2016

Boa tarde,
estou com problemas ao fazer a soma de um campo chamado (R05.R_VALPAGTO), na verdade esse campo é alimentado por dois tipos de movimento, são os valores de pagamento e troco do caixa, fazendo a junção através do comando SUM, eu tenho apenas o retorno do valor liquido.
As regras são:
O campo (I_NUMERO) tem que ser igual para agrupar, segue o código:
select distinct '3' COD_LOJA, TAB_ECF.MOV_PDV, TAB_ECF.MOV_ECF, R04.S_COO, R07.ID + 100, R07.ID + 100,
R04.D_DATA_INICIO_EMISSAO as MOV_DTHR_REGISTRO, R04.D_DATA_INICIO_EMISSAO as MOV_DT_MOVIMENTO,
'T' MOV_TPO_DOCUMENTO,
case
when R05.B_CANCEL_CUPOM = 0 then '03'
when R05.B_CANCEL_CUPOM = 1 then '11'
end as MOV_TPO_REGISTRO,
case
when R05.B_CANCEL_CUPOM = 0 then 'FinalizadorVenda'
when R05.B_CANCEL_CUPOM = 1 then 'CancelamentoVenda'
end as MOV_LEG_REGISTRO,
0 PRO_ID, '' MOV_TPO_PRODUTO, 0 R_QUANTIDADE, 0 R_VALOR_UNITARIO, SUM(R07.R_VALPAGTO), 0 VEN_ID, 0 CLI_ID,
'' MOV_TPO_CLIENTE, R07.ID_VNDOPERADOR,
case
when R05.B_CANCEL_CUPOM = 0 then R07.I_NUMERO
when R05.B_CANCEL_CUPOM = 1 then 0
end as FIN_ID,
0 ITF_ID, null MOV_CGCCPF_CHEQUE, null MOV_BANCO, null MOV_AGENCIA, null MOV_NR_CHEQUE,
null MOV_VCT_CHEQUE, null MOV_NR_PARCELA, null MOV_FONE_CHEQUE, null MOV_CMC7_CHEQUE,
null MOV_REDE_DESTINO_TEF, null MOV_TPO_TRANSACAO_TEF, null MOV_NR_CARTAO_INTERNO,
null MOV_TPO_DOC_PGTO_CTAS, null MOV_STATUS_TRANS_TEF,
NULL MOV_VLR_TROCO, null MOV_TAB_PERC_UTILIZADA,
null MOV_PTOS_CONC_ITEM, null COD_TRIBUTACAO, null MOV_LEG_TRIB, null I_NUMSUPERV, null PRO_COD_BARRA,
null MOV_CESTA_BASICA, null R_DESCONTO_ITEM, null R_DESCONTO_SUBTOTAL, null R_ACRESCIMO_SUBTOTAL,
null MOV_TPO_PARCMTO_TEF, null MOV_BIN_CARTAO_TEF, null MOV_NR_PARCELAS_TEF,
null MOV_REGISTRO_CANCELADO, null FIN_ID_ANTERIOR, null ITF_ID_ANTERIOR,
case
when R05.B_CANCEL_CUPOM = 0 then '01'
when R05.B_CANCEL_CUPOM = 1 then null
end as MOV_TPO_REG_REF_FIN_ID,
null MOV_NR_TICKET_TROCA, null MOV_TANQUE, null MOV_BICO, null MOV_NR_ABASTECIMENTO,
null MOV_SEQ_ABASTECIMENTO, null MOV_LOC_CANC_REGISTRO, null MOV_ID_LISTA_CASAMTO, null MOV_C1_CHEQUE,
null MOV_C2_CHEQUE, null MOV_C3_CHEQUE, null S_CCF_CVC_CBP, null MOV_CAMARA_COMPESACAO,
null MOV_DESC_PRODPRECMULT, null MOV_DESC_PROM_CAMPANHA, null S_CRZ, null MOV_NSU_TEF,
null MOV_QTD_PRODPRECMULT, null MOV_GNF, null MOV_NR_DAV_PEDIDO, null MOV_TPO_DAV_PEDIDO,
null MOV_MODALPAGTO_TEF, null MOV_INSTITUICAO_TEF, null MOV_CODTIPOCARTAO_TEF,
null MOV_CODAUTORTRANS_TEF, null MOV_COND_PAGAMENTO, null MOV_PRI_DOCMTO_DIGITADO,
null MOV_SEG_DOCMTO_DIGITADO, null MOV_TER_DOCMTO_DIGITADO, null MOV_QUA_DOCMTO_DIGITADO,
case
when R05.B_CANCEL_CUPOM = 0 then '01'
when R05.B_CANCEL_CUPOM = 1 then null
end as MOV_NUMERO_DOCMTO,
null MOV_NUMERO_PDV_COMANDA, R04.S_NUMERO_FABRICACAO, null S_MF_ADICIONAL, null S_TIPOECF,
null S_MARCAECF, null S_MODELOECF, null MOV_COO_DFV, null S_CODIGOMD5_PAF, null MOV_FLAG_T,
null MOV_FLAG_C, 'N' MOV_FLAG_M
from R07
inner join R04 on (R07.ID_R04 = R04.ID)
inner join R05 on (R07.ID_R04 = R05.ID_R04)
inner join TAB_ECF on (R04.S_NUMERO_FABRICACAO = TAB_ECF.MOV_NUM_FAB)
group by ?

Johnny
|
MVP
    27 fev 2016

Estou me deparando com seguinte erro:

Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)

Eu sei que o problemas esta na relação dos campos do group by, mas não estou conseguindo.

0
|
0

William (devwilliam)
   - 27 fev 2016

Por gentileza quando for postar trechos de código utilize a tag CODE:
Clique na imagem para abrir em uma nova janela

Johnny, por incrível que pareça mas com essa consulta extremamente complexa, onde só você conhece a estrutura das tabelas e as regras de negócio para o retorno esperado fica muito difícil tentar ajudar!

Uma dica seria reduzir um pouco essa consulta, quebrando em Views simples, até porque os "CASES" deixam a instrução menos legível ainda.

0
|
0

Johnny
|
MVP
    27 fev 2016

Me perdoe sobre a TAG, sou novo em forum rs...

Sobre o código... na verdade ele é maior, esta é uma parte, na verdade através desse select eu montei a view, e através dessa view eu tenho uma trigger disparando em select e insert.

Sobre o Group By, eu só consigo fechar se incluir todas as colunas, com exceção da que esta agregando ou somando, mas dessa forma eu não consigo comprimir as linhas. Eu queria basicamente agrupar pelo numero do COO. O código já está pronto e funcionando, somente preciso tratar essa questão do troco. Acho que vou tratar depois do insert, criando uma trigger para fazer update dos valores.

#Código

CREATE OR ALTER VIEW PDV_MOVOUTRA(
    MOV_LOJA,
    MOV_PDV,
    MOV_ECF,
    MOV_COO,
    MOV_SEQ_COO,
    MOV_SEQ_ITEM,
    MOV_DTHR_REGISTRO,
    MOV_DT_MOVIMENTO,
    MOV_TPO_DOCUMENTO,
    MOV_TPO_REGISTRO,
    MOV_LEG_REGISTRO,
    PRO_ID,
    MOV_TPO_PRODUTO,
    MOV_QTD_ITEM,
    MOV_VLR_UNIT,
    MOV_VLR_TOTAL,
    VEN_ID,
    CLI_ID,
    MOV_TPO_CLIENTE,
    OPE_ID,
    FIN_ID,
    ITF_ID,
    MOV_CGCCPF_CHEQUE,
    MOV_BANCO,
    MOV_AGENCIA,
    MOV_NR_CHEQUE,
    MOV_VCT_CHEQUE,
    MOV_NR_PARCELA,
    MOV_FONE_CHEQUE,
    MOV_CMC7_CHEQUE,
    MOV_REDE_DESTINO_TEF,
    MOV_TPO_TRANSACAO_TEF,
    MOV_NR_CARTAO_INTERNO,
    MOV_TPO_DOC_PGTO_CTAS,
    MOV_STATUS_TRANS_TEF,
    MOV_VLR_TROCO,
    MOV_TAB_PREC_UTILIZADA,
    MOV_PTOS_CONC_ITEM,
    MOV_COD_TRIB,
    MOV_LEG_TRIB,
    FSC_ID,
    PRO_COD_BARRA,
    MOV_CESTA_BASICA,
    MOV_DESCONTO_ITEM,
    MOV_DESCONTO_CUPOM,
    MOV_ACRESCIMO_CUPOM,
    MOV_TPO_PARCMTO_TEF,
    MOV_BIN_CARTAO_TEF,
    MOV_NR_PARCELAS_TEF,
    MOV_REGISTRO_CANCELADO,
    FIN_ID_ANTERIOR,
    ITF_ID_ANTERIOR,
    MOV_TPO_REG_REF_FIN_ID,
    MOV_NR_TICKET_TROCA,
    MOV_TANQUE,
    MOV_BICO,
    MOV_NR_ABASTECIMENTO,
    MOV_SEQ_ABASTECIMENTO,
    MOV_LOC_CANC_REGISTRO,
    MOV_ID_LISTA_CASAMTO,
    MOV_C1_CHEQUE,
    MOV_C2_CHEQUE,
    MOV_C3_CHEQUE,
    MOV_CCF,
    MOV_CAMARA_COMPESACAO,
    MOV_DESC_PRODPRECMULT,
    MOV_DESC_PROM_CAMPANHA,
    MOV_CRZ,
    MOV_NSU_TEF,
    MOV_QTD_PRODPRECMULT,
    MOV_GNF,
    MOV_NR_DAV_PEDIDO,
    MOV_TPO_DAV_PEDIDO,
    MOV_MODALPAGTO_TEF,
    MOV_INSTITUICAO_TEF,
    MOV_CODTIPOCARTAO_TEF,
    MOV_CODAUTORTRANS_TEF,
    MOV_COND_PAGAMENTO,
    MOV_PRI_DOCMTO_DIGITADO,
    MOV_SEG_DOCMTO_DIGITADO,
    MOV_TER_DOCMTO_DIGITADO,
    MOV_QUA_DOCMTO_DIGITADO,
    MOV_NUMERO_DOCMTO,
    MOV_NUMERO_PDV_COMANDA,
    MOV_NUM_FAB,
    MOV_MF_ADICIONAL,
    MOV_TIPO_ECF,
    MOV_MARCAR_ECF,
    MOV_MODELO_ECF,
    MOV_COO_DFV,
    MOV_MD5,
    MOV_FLAG_T,
    MOV_FLAG_C,
    MOV_FLAG_M)
AS
select distinct '1' COD_LOJA, TAB_ECF.MOV_PDV, TAB_ECF.MOV_ECF, R04.S_COO, R05.S_NUM_ITEM as MOV_SEQ_COO,
                R05.S_NUM_ITEM as MOV_SEQ_ITEM, R04.D_DATA_INICIO_EMISSAO as MOV_DTHR_REGISTRO,
                R04.D_DATA_INICIO_EMISSAO as MOV_DT_MOVIMENTO, 'T' MOV_TPO_DOCUMENTO, '01' MOV_TPO_REGISTRO,
                'VendaItem' MOV_LEG_REGISTRO, R05.S_CODIGO_PRODUTO as PRO_ID, null MOV_TPO_PRODUTO, R05.R_QUANTIDADE,
                R05.R_VALOR_UNITARIO, R05.R_VALOR_TOTAL_LIQUIDO, null VEN_ID, null CLI_ID, null MOV_TPO_CLIENTE,
                vndoperador.scodoperador, null I_NUMERO, null ITF_ID, null MOV_CGCCPF_CHEQUE, null MOV_BANCO,
                null MOV_AGENCIA, null MOV_NR_CHEQUE, null MOV_VCT_CHEQUE, null MOV_NR_PARCELA, null MOV_FONE_CHEQUE,
                null MOV_CMC7_CHEQUE, null MOV_REDE_DESTINO_TEF, null MOV_TPO_TRANSACAO_TEF, null MOV_NR_CARTAO_INTERNO,
                null MOV_TPO_DOC_PGTO_CTAS, null MOV_STATUS_TRANS_TEF, null MOV_VLR_TROCO, null MOV_TAB_PERC_UTILIZADA,
                null MOV_PTOS_CONC_ITEM,
                case
                  when R05.S_TOTALIZADOR_PARCIAL = '01T0700' then '1'
                  when R05.S_TOTALIZADOR_PARCIAL = '02T1200' then '2'
                  when R05.S_TOTALIZADOR_PARCIAL = '03T1800' then '3'
                  when R05.S_TOTALIZADOR_PARCIAL = '04T2500' then '4'
                  when R05.S_TOTALIZADOR_PARCIAL = 'F1' then '14'
                  when R05.S_TOTALIZADOR_PARCIAL = 'I1' then '15'
                  when R05.S_TOTALIZADOR_PARCIAL = 'N1' then '16'
                end as COD_TRIBUTACAO,
                case
                  when R05.S_TOTALIZADOR_PARCIAL = '01T0700' then 'T07,00'
                  when R05.S_TOTALIZADOR_PARCIAL = '02T1200' then 'T12,00'
                  when R05.S_TOTALIZADOR_PARCIAL = '03T1800' then 'T18,00'
                  when R05.S_TOTALIZADOR_PARCIAL = '04T2500' then 'T25,00'
                  when R05.S_TOTALIZADOR_PARCIAL = 'F1' then 'F0000'
                  when R05.S_TOTALIZADOR_PARCIAL = 'I1' then 'I00.00'
                  when R05.S_TOTALIZADOR_PARCIAL = 'N1' then 'N0000'
                end as MOV_LEG_TRIB,
                R04.I_NUMSUPERV, R05.S_CODIGO_PRODUTO as PRO_COD_BARRA, null MOV_CESTA_BASICA, R05.R_DESCONTO_ITEM,
                R05.R_DESCONTO_SUBTOTAL, R05.R_ACRESCIMO_SUBTOTAL, null MOV_TPO_PARCMTO_TEF, null MOV_BIN_CARTAO_TEF,
                null MOV_NR_PARCELAS_TEF,
                case
                  when R05.S_INDICADOR_CANCELAMENTO = 'S' then 'T'
                  when R05.B_CANCEL_CUPOM = '1' then 'T'
                  when R05.B_CANCEL_CUPOM = '0' then null
                end as MOV_REGISTRO_CANCELADO,
                null FIN_ID_ANTERIOR, null ITF_ID_ANTERIOR, null MOV_TPO_REG_REF_FIN_ID, null MOV_NR_TICKET_TROCA,
                null MOV_TANQUE, null MOV_BICO, null MOV_NR_ABASTECIMENTO, null MOV_SEQ_ABASTECIMENTO,
                case
                  when R05.S_INDICADOR_CANCELAMENTO = 'S' then '1'
                  when R05.B_CANCEL_CUPOM = '1' then '1'
                  when R05.B_CANCEL_CUPOM = '0' then null
                end as MOV_LOC_CANC_REGISTRO,
                null MOV_ID_LISTA_CASAMTO, null MOV_C1_CHEQUE, null MOV_C2_CHEQUE, null MOV_C3_CHEQUE,
                R05.S_CCF_CVC_CBP, null MOV_CAMARA_COMPESACAO, null MOV_DESC_PRODPRECMULT, null MOV_DESC_PROM_CAMPANHA,
                null S_CRZ, null MOV_NSU_TEF, null MOV_QTD_PRODPRECMULT, null MOV_GNF, null MOV_NR_DAV_PEDIDO,
                null MOV_TPO_DAV_PEDIDO, null MOV_MODALPAGTO_TEF, null MOV_INSTITUICAO_TEF, null MOV_CODTIPOCARTAO_TEF,
                null MOV_CODAUTORTRANS_TEF, null MOV_COND_PAGAMENTO, null MOV_PRI_DOCMTO_DIGITADO,
                null MOV_SEG_DOCMTO_DIGITADO, null MOV_TER_DOCMTO_DIGITADO, null MOV_QUA_DOCMTO_DIGITADO,
                null MOV_NUMERO_DOCMTO, null MOV_NUMERO_PDV_COMANDA, R04.S_NUMERO_FABRICACAO, null S_MF_ADICIONAL,
                null S_TIPOECF, null S_MARCAECF, null S_MODELOECF, null MOV_COO_DFV, null S_CODIGOMD5_PAF,
                null MOV_FLAG_T,
                case
                  when R05.S_INDICADOR_CANCELAMENTO = 'S' then '*'
                  when R05.B_CANCEL_CUPOM = '1' then '*'
                  when R05.B_CANCEL_CUPOM = '0' then null
                end as MOV_FLAG_C,
                null MOV_FLAG_M

from R05
inner join R04 on (R05.ID_R04 = R04.ID)
inner join TAB_ECF on (R04.S_NUMERO_FABRICACAO = TAB_ECF.MOV_NUM_FAB)
inner join R07 on (R04.ID = R07.ID_R04)
inner join vndoperador on (R07.id_vndoperador = vndoperador.id)

union

select distinct '1' COD_LOJA, TAB_ECF.MOV_PDV, TAB_ECF.MOV_ECF, R04.S_COO, R07.ID + 100, R07.ID + 100,
                R04.D_DATA_INICIO_EMISSAO as MOV_DTHR_REGISTRO, R04.D_DATA_INICIO_EMISSAO as MOV_DT_MOVIMENTO,
                'T' MOV_TPO_DOCUMENTO,
                case
                  when R05.B_CANCEL_CUPOM = 0 then '03'
                  when R05.B_CANCEL_CUPOM = 1 then '11'
                end as MOV_TPO_REGISTRO,
                case
                  when R05.B_CANCEL_CUPOM = 0 then 'FinalizadorVenda'
                  when R05.B_CANCEL_CUPOM = 1 then 'CancelamentoVenda'
                end as MOV_LEG_REGISTRO,
                null PRO_ID, null MOV_TPO_PRODUTO, null R_QUANTIDADE, null R_VALOR_UNITARIO, R07.R_VALPAGTO,
                null VEN_ID, null CLI_ID, null MOV_TPO_CLIENTE, vndoperador.scodoperador,
                case
                  when R05.B_CANCEL_CUPOM = 0 then R07.I_NUMERO
                  when R05.B_CANCEL_CUPOM = 1 then 0
                end as FIN_ID,
                null ITF_ID, null MOV_CGCCPF_CHEQUE, null MOV_BANCO, null MOV_AGENCIA, null MOV_NR_CHEQUE,
                null MOV_VCT_CHEQUE, null MOV_NR_PARCELA, null MOV_FONE_CHEQUE, null MOV_CMC7_CHEQUE,
                null MOV_REDE_DESTINO_TEF, null MOV_TPO_TRANSACAO_TEF, null MOV_NR_CARTAO_INTERNO,
                null MOV_TPO_DOC_PGTO_CTAS, null MOV_STATUS_TRANS_TEF, null MOV_VLR_TROCO, null MOV_TAB_PERC_UTILIZADA,
                null MOV_PTOS_CONC_ITEM, null COD_TRIBUTACAO, null MOV_LEG_TRIB, null I_NUMSUPERV, null PRO_COD_BARRA,
                null MOV_CESTA_BASICA, null R_DESCONTO_ITEM, null R_DESCONTO_SUBTOTAL, null R_ACRESCIMO_SUBTOTAL,
                null MOV_TPO_PARCMTO_TEF, null MOV_BIN_CARTAO_TEF, null MOV_NR_PARCELAS_TEF,
                null MOV_REGISTRO_CANCELADO, null FIN_ID_ANTERIOR, null ITF_ID_ANTERIOR,
                case
                  when R05.B_CANCEL_CUPOM = 0 then '01'
                  when R05.B_CANCEL_CUPOM = 1 then null
                end as MOV_TPO_REG_REF_FIN_ID,
                null MOV_NR_TICKET_TROCA, null MOV_TANQUE, null MOV_BICO, null MOV_NR_ABASTECIMENTO,
                null MOV_SEQ_ABASTECIMENTO, null MOV_LOC_CANC_REGISTRO, null MOV_ID_LISTA_CASAMTO, null MOV_C1_CHEQUE,
                null MOV_C2_CHEQUE, null MOV_C3_CHEQUE, null S_CCF_CVC_CBP, null MOV_CAMARA_COMPESACAO,
                null MOV_DESC_PRODPRECMULT, null MOV_DESC_PROM_CAMPANHA, null S_CRZ, null MOV_NSU_TEF,
                null MOV_QTD_PRODPRECMULT, null MOV_GNF, null MOV_NR_DAV_PEDIDO, null MOV_TPO_DAV_PEDIDO,
                null MOV_MODALPAGTO_TEF, null MOV_INSTITUICAO_TEF, null MOV_CODTIPOCARTAO_TEF,
                null MOV_CODAUTORTRANS_TEF, null MOV_COND_PAGAMENTO, null MOV_PRI_DOCMTO_DIGITADO,
                null MOV_SEG_DOCMTO_DIGITADO, null MOV_TER_DOCMTO_DIGITADO, null MOV_QUA_DOCMTO_DIGITADO,
                case
                  when R05.B_CANCEL_CUPOM = 0 then '01'
                  when R05.B_CANCEL_CUPOM = 1 then null
                end as MOV_NUMERO_DOCMTO,
                null MOV_NUMERO_PDV_COMANDA, R04.S_NUMERO_FABRICACAO, null S_MF_ADICIONAL, null S_TIPOECF,
                null S_MARCAECF, null S_MODELOECF, null MOV_COO_DFV, null S_CODIGOMD5_PAF, null MOV_FLAG_T,
                null MOV_FLAG_C, null MOV_FLAG_M

from R07
inner join R04 on (R07.ID_R04 = R04.ID)
inner join R05 on (R07.ID_R04 = R05.ID_R04)
inner join TAB_ECF on (R04.S_NUMERO_FABRICACAO = TAB_ECF.MOV_NUM_FAB)
--inner join VNDTEF on (R04.id = VNDTEF.id_r04)
inner join vndoperador on (R07.id_vndoperador = vndoperador.id)
;

0
|
0

Johnny
|
MVP
    27 fev 2016

Consegui!

Eu criei uma pequena view somente para somar essa informação :D

Valeu pela dica.

0
|
0

William (devwilliam)
   - 28 fev 2016

Legal, as vezes precisamos só de uma direção!

0
|
0