GARANTIR DESCONTO

Fórum Desagrupar uma coluna no MYSQL #521401

30/05/2015

0

Gente estou com um problema e não achei resposta tenho uma consulta no MYSQL fiz select com duas tabelas e estão agrupadas por uma chave primaria eu quero desagrupar apenas um campo desta tabela que no caso são as datas de vencimento das parcelas.
Alguem pode me ajudar.
Márcio

Márcio

Responder

Post mais votado

30/05/2015

Você pode postar o código?
Ficaria mais fácil entender e também poder te ajudar...

Marisiana Battistella

Marisiana Battistella
Responder

Gostei + 2

Mais Posts

30/05/2015

Márcio

O codigo é o seguinte:

$sql = "SELECT *, MAX(paciente.num_parcelas)-SUM(financeira.parcelas_pg) AS 'parcelas_rest',
SUM(financeira.parcelas_pg) AS 'parcelas_pg1',
GROUP_CONCAT(venc_parcelas) AS 'venc_parc02'
FROM paciente inner join financeira on paciente.id = financeira.id_pac
where status=1
GROUP BY paciente.id
ORDER BY nome_pac ASC ";

No lugar de GROUP_CONCAT teria outro comando para poder exibir todos os "venc_parcelas" que está na tabela financeira pois está agrupado pelo GROUP BY e quero desagrupar só o "venc_parcelas".
A contatenação não satifaz o objetivo do sistema é possivél depois de agrupado desagrupar apenas esta a culuna "venc_parcelas" pois ela varia conforme o numero de parcelas porem ela é relacionada com o id da tabela paciente.
As tabelas "paciente e financeira" estão ligadas ao id e id_pac
Responder

Gostei + 1

30/05/2015

Marisiana Battistella

Entendi, mas o teu SQL precisa ser melhorado e eu acho que você não precisa desse GROUP_CONCAT.
Não utilize SELECT * informe os nomes dos campos que você precisa que o SQL retorne.
E o agrupamento não vai funcionar justamente porque você está agrupando pelo ID que é um valor único para cada registro.

Você pode postar a estrutura dessas duas tabelas (nomes dos campos, FK e PK ) ?
Responder

Gostei + 0

31/05/2015

Márcio

[img:descricao=TB financeira]http://arquivo.devmedia.com.br/forum/imagem/433925-20150531-001517.png[/img]

[img:descricao=TB paciente]http://arquivo.devmedia.com.br/forum/imagem/433925-20150531-001543.png[/img]
Responder

Gostei + 0

31/05/2015

Marisiana Battistella

Você precisa listar as parcelas pagas e as parcelas restantes por data de vencimento das parcelas?

Veja se esse código se aproxima do que você precisa:
SELECT  fin.venc_parcelas AS 'venc_parc02',
       MAX(pac.num_parcelas) - SUM(fin.parcelas_pg) AS 'parcelas_rest',
       SUM(fin.parcelas_pg) AS 'parcelas_pg1'      
FROM paciente pac
INNER JOIN financeira fin
ON fin.id_pac = pac.id 
WHERE pac.status=1 
GROUP BY fin.venc_parcelas
ORDER BY pac.nome_pac ASC 
Responder

Gostei + 0

31/05/2015

Márcio

Se agrupar pelo venc_parcelas hora de exibir também aperceu o nome varias vezes testei este codigo preciso que apareça o nome uma vez e repita apenas as datas de cada paciente que está interligados ao id e id_pac com o concat deu um resultado quase bom pois quando exibe os dados ele concatena as datas de vencimentos não tem uma função de desagregação que possa ser usado com MAX ou MIN que possa desagregar apenas o campo esperado.
[img]http://arquivo.devmedia.com.br/forum/imagem/433925-20150531-145852.png[/img]

Esta é a imagem resultante do select. Preciso que em cada paciente mostre o campo venc_parcelas para determinado paciente mas mostre seu nome apenas uma vez.
Responder

Gostei + 0

01/06/2015

Marisiana Battistella

Nesse caso você precisa incluir o nome do paciente no retorno e no GROUP BY.
Na aplicação você terá que tratar a visualização dos dados...
SELECT pac.nome_pac,
       fin.venc_parcelas AS 'venc_parc02',
       MAX(pac.num_parcelas) - SUM(fin.parcelas_pg) AS 'parcelas_rest',
       SUM(fin.parcelas_pg) AS 'parcelas_pg1'      
FROM paciente pac
INNER JOIN financeira fin
ON fin.id_pac = pac.id 
WHERE pac.status=1 
GROUP BY pac.nome_pac,
         fin.venc_parcelas
ORDER BY pac.nome_pac ASC 
Responder

Gostei + 1

01/06/2015

Marisiana Battistella

Outro ponto a ser analisado: Os valores que o SELECT retorna estão corretos? Você chegou a fazer essa conferência?
Responder

Gostei + 0

01/06/2015

Márcio

Sim o restante está funcional e atende o unico problema é a questão de as datas de venc estão sendo agrupadas de forma que não atende vou testar o codigo que vc implementou mas desde já agradeço a disponibilidade.
Responder

Gostei + 0

01/06/2015

Márcio

Mas o erro persiste ao executar o select todas as insindencias se repetem não consigo isolar a venc_parcelas vou tentar mudar a estrutura do BD financeira com campos dos pag para receber apenas um id_pac ou pensar outra coisa Mas agradeço.
Responder

Gostei + 0

01/06/2015

Marcos P

Fica mais fácil para nós ajudarmos, se você criar a estrutura no Fiddle e colocar alguns registros para simularmos sua pesquisa !
Responder

Gostei + 0

01/06/2015

Márcio

Coloquei http://sqlfiddle.com/#!9/6a148/4
Gente do jeito que está no representado é o que eu preciso.
Só quero substituir o GROUP_CONCAT mas nada o restante tá ok ainda falta tratar as casas decimais para valores mas isso é o de menos só preciso de uma forma de substituir o concat mas nada.
Eu não consegui uma função de "desagregação" quando faço a substituição do group by os nomes também são exibidos na real preciso que o nome apareça uma vez e as datas de venc que estão ligadas ao tal nome apareça em sua totalidade..
Na exibição dá o resultado que preciso porem preciso substiuir o concat.
Responder

Gostei + 0

01/06/2015

Marisiana Battistella

Essa exibição dos dados é em um relatório?
Que ferramenta você está utilizando e qual é a linguagem de desenvolvimento?
Responder

Gostei + 0

01/06/2015

Márcio

Este select vai gerar relatório sim mas o sistema é mais complexo a linguagem é PHP pois está rodando na web.
Mas a ferramenta tem hora que netbeens mas agora estou no dreamweaver para facilitar o uso de tabelas e formulários.
Responder

Gostei + 0

01/06/2015

Marcos P

Mas a ferramenta tem hora que netbeens mas agora estou no dreamweaver para facilitar o uso de tabelas e formulários.


Não entendi essa frase !

Como contingência, você não consegue pegar os dados como está gerando agora e desmembrando-os do lado da aplicação ?

Em relação a query que você colocou no Fiddle, qual sua necessidade ?

Manter as totalizações (parcelas_rest e parcelas_pg1 ) e individualizar os vencimentos (venc_parc02)...

nome_pac        parcelas_rest   parcelas_pg1     venc_parc02
--------------- --------------- --------------- ---------------
Carlos Barão         3              0              2015-06-21
Carlos Barão         3              0              2015-08-21
Carlos Barão         3              0              2015-07-21
Márcio André         5              0              2015-07-30
Márcio André         5              0              2015-09-30
Márcio André         5              0              2015-06-30
Márcio André         5              0              2015-08-30
Márcio André         5              0              2015-10-30

É isso ?
Responder

Gostei + 0

01/06/2015

Marisiana Battistella

Se o retorno dos dados está correto, o problema não é o SQL, o que falta é programar na aplicação para fazer a visualização desses dados.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar