none
Agupar Select RRS feed

  • Pergunta

  • Estou tentando agrupar os dados abaixo e não estou conseguindo,segue query:

    select
       (select  isnull(sum(valor_pendencia),0) from tbl_faturamento where codigo_comanda  = c.codigo and pendencia = 1  )valorpendencia,
       isnull(B.valor_utilizado,0.00)total, 
       A.codigo,A.nome,
       A.apelido,
       A.telefone,
       A.celular,
       A.Email
       from tbl_Clientes A
       left join tbl_Credito B
       on A.Codigo = B.codigo_cliente
       left join tbl_ComandaAberta C
       on C.codigo_cliente = A.codigo
       where A.nome like '%jeffers%'
       and A.Codigo_empresa = 1
       group by
       B.valor_utilizado, 
       A.codigo,A.nome,
       A.apelido,
       A.telefone,
       A.celular,
       A.Email,
       C.codigo
       order by A.nome

    Obrgado:

    terça-feira, 15 de novembro de 2016 14:04

Respostas

  • O group by nao esta sendo usado para nada, pois voce nao tem uma funcao de agrupamento (sum,count, etc..) na sua query (o que voce tem é uma subquey que faz a soma). Caso nao queira repetir as linhas, sugiro usar um distinct. Depois o join com a tabela tbl_ComandaAberta esta no lugar errado. Ela deve estar junto com a sua subquery. 

    select Distinct
       (select  isnull(sum(valor_pendencia),0) from tbl_faturamento where codigo_comanda  in (Select codigo from  tbl_ComandaAberta where tbl_ComandaAberta.codigo_cliente = A.codigo) and pendencia = 1  ) valorpendencia,
       isnull(B.valor_utilizado,0.00)total, 
       A.codigo,
       A.nome,
       A.apelido,
       A.telefone,
       A.celular,
       A.Email
       from tbl_Clientes A
             left join tbl_Credito B on B.codigo_cliente = A.Codigo 
       where A.nome like '%jeffers%' and A.Codigo_empresa = 1
       order by A.nome

    Esxitem outras maneiras de fazer isso (usando conjuntos, p.ex)

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    terça-feira, 15 de novembro de 2016 14:43
  • Olá,

    Não entendi qual a intenção ou pelo o que quer agrupar. Quer somar algum valor?

    Pelo que deu pra perceber esse código que mandou, possui mais colunas no GROUP BY que não estão sendo mostradas na tela. Particularmente acho que é o C.codigo que está no seu GROUP BY que impede o agrupamento das duas primeiras linhas, provavelmente esse código é diferente para cada linha e por isso ele não agrupa.

    Tente mudar sua query para isso (Lembrando, se quiser fazer somas ou coisas do gênero vai precisar mudar mais coisas):

    select
       (select  isnull(sum(valor_pendencia),0) from tbl_faturamento where codigo_comanda  = c.codigo and pendencia = 1  )valorpendencia,
       isnull(B.valor_utilizado,0.00)total, 
       A.codigo,
       A.nome,
       A.apelido,
       A.telefone,
       A.celular,
       A.Email
       from tbl_Clientes A
       left join tbl_Credito B
       on A.Codigo = B.codigo_cliente
       left join tbl_ComandaAberta C
       on C.codigo_cliente = A.codigo
       where A.nome like '%jeffers%'
       and A.Codigo_empresa = 1
       group by
       B.valor_utilizado, 
       A.codigo,
       A.nome,
       A.apelido,
       A.telefone,
       A.celular,
       A.Email
       order by A.nome

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta _Manigold_ terça-feira, 15 de novembro de 2016 14:50
    terça-feira, 15 de novembro de 2016 14:10
  • Tem como você compartilhar o script para criação das tabelas em questão pra que possamos simular com os devidos tipos de dados?

    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta _Manigold_ terça-feira, 15 de novembro de 2016 14:50
    terça-feira, 15 de novembro de 2016 14:39

Todas as Respostas

  • Olá,

    Não entendi qual a intenção ou pelo o que quer agrupar. Quer somar algum valor?

    Pelo que deu pra perceber esse código que mandou, possui mais colunas no GROUP BY que não estão sendo mostradas na tela. Particularmente acho que é o C.codigo que está no seu GROUP BY que impede o agrupamento das duas primeiras linhas, provavelmente esse código é diferente para cada linha e por isso ele não agrupa.

    Tente mudar sua query para isso (Lembrando, se quiser fazer somas ou coisas do gênero vai precisar mudar mais coisas):

    select
       (select  isnull(sum(valor_pendencia),0) from tbl_faturamento where codigo_comanda  = c.codigo and pendencia = 1  )valorpendencia,
       isnull(B.valor_utilizado,0.00)total, 
       A.codigo,
       A.nome,
       A.apelido,
       A.telefone,
       A.celular,
       A.Email
       from tbl_Clientes A
       left join tbl_Credito B
       on A.Codigo = B.codigo_cliente
       left join tbl_ComandaAberta C
       on C.codigo_cliente = A.codigo
       where A.nome like '%jeffers%'
       and A.Codigo_empresa = 1
       group by
       B.valor_utilizado, 
       A.codigo,
       A.nome,
       A.apelido,
       A.telefone,
       A.celular,
       A.Email
       order by A.nome

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta _Manigold_ terça-feira, 15 de novembro de 2016 14:50
    terça-feira, 15 de novembro de 2016 14:10
  • Olá André tudo bem? se eu nao colocar o codigo ele reclama que nao esta no group by.

    Obrigado.

    A coluna 'tbl_ComandaAberta.codigo' é inválida na lista de seleção porque não está incluída numa função de agregação ou na cláusula GROUP BY.

    • Editado _Manigold_ terça-feira, 15 de novembro de 2016 14:32
    terça-feira, 15 de novembro de 2016 14:20
  • _Manigold_,

    Acredito que a coluna valor_utilizado possa estar atrapalhando o agrupamento (por permitir NULL). Retire-a do SELECT e do GROUP BY e faça um teste.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".




    terça-feira, 15 de novembro de 2016 14:27
  • Olá Juliano eu preciso somar os valores mas infelizmente nao esta funcionando.

    Muito obrigado.

    terça-feira, 15 de novembro de 2016 14:32
  • Exatamente por causa do C.codigo não consigo agrupar, mas a query esta exigindo o mesmo e preciso somar.
    • Editado _Manigold_ terça-feira, 15 de novembro de 2016 14:35
    terça-feira, 15 de novembro de 2016 14:34
  • Tem como você compartilhar o script para criação das tabelas em questão pra que possamos simular com os devidos tipos de dados?

    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    • Marcado como Resposta _Manigold_ terça-feira, 15 de novembro de 2016 14:50
    terça-feira, 15 de novembro de 2016 14:39
  • Oi Juliano,não tenho acesso ao script,o máximo que posso é o print , agradeço mesmo a força muito obrigado.

    select
       (select  isnull(sum(valor_pendencia),0) from tbl_faturamento where codigo_comanda  = c.codigo and pendencia = 1  )valorpendencia,
       isnull(B.valor_utilizado,0.00)total, 
       A.codigo,A.nome,
       A.apelido,
       A.telefone,
       A.celular,
       A.Email
       from tbl_Clientes A
       left join tbl_Credito B
       on A.Codigo = B.codigo_cliente
       left join tbl_ComandaAberta C
       on C.codigo_cliente = A.codigo
       where A.nome like '%jeffers%'
       and A.Codigo_empresa = 1
       group by
       B.valor_utilizado, 
       A.codigo,A.nome,
       A.apelido,
       A.telefone,
       A.celular,
       A.Email,
       C.codigo
       order by A.nome


    • Editado _Manigold_ terça-feira, 15 de novembro de 2016 14:43
    terça-feira, 15 de novembro de 2016 14:41
  • O group by nao esta sendo usado para nada, pois voce nao tem uma funcao de agrupamento (sum,count, etc..) na sua query (o que voce tem é uma subquey que faz a soma). Caso nao queira repetir as linhas, sugiro usar um distinct. Depois o join com a tabela tbl_ComandaAberta esta no lugar errado. Ela deve estar junto com a sua subquery. 

    select Distinct
       (select  isnull(sum(valor_pendencia),0) from tbl_faturamento where codigo_comanda  in (Select codigo from  tbl_ComandaAberta where tbl_ComandaAberta.codigo_cliente = A.codigo) and pendencia = 1  ) valorpendencia,
       isnull(B.valor_utilizado,0.00)total, 
       A.codigo,
       A.nome,
       A.apelido,
       A.telefone,
       A.celular,
       A.Email
       from tbl_Clientes A
             left join tbl_Credito B on B.codigo_cliente = A.Codigo 
       where A.nome like '%jeffers%' and A.Codigo_empresa = 1
       order by A.nome

    Esxitem outras maneiras de fazer isso (usando conjuntos, p.ex)

    Att


    William John Adam Trindade
    Analyste-programmeur
    ----------------------------------------------------------


    terça-feira, 15 de novembro de 2016 14:43
  • Funcionou, Obrigado a todos.
    terça-feira, 15 de novembro de 2016 14:46
  • _Manigold_,

    Uma sugestão sobre o fórum. Marque apenas a resposta (ou quando aplicável, as respostas) que levou a solução do seu problema, para facilitar quando outras pessoas consultarem dúvidas similares. 


    Abraço.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    terça-feira, 15 de novembro de 2016 15:02