SELECT COM UMA CASE DE AGRUPAMENTO

 Tópico anterior Próximo tópico Novo tópico

SELECT COM UMA CASE DE AGRUPAMENTO

SQL / DATABASE

 Compartilhe  Compartilhe  Compartilhe
#490648 - 08/10/2019 09:47:59

AMELINHACODE
SAO PAULO
Cadast. em:Junho/2019


Pessoal, possuo uma tabela com varios registros... cada pedido pode possuir varios registros, entao fiz a seguinte SQL

SELECT     COD_PEDIDO, STATUS, (CASE WHEN status = 1 THEN 'QUITADO' ELSE 'EM ABERTO' END) AS Expr1
FROM         parcelas
WHERE     (COD_PEDIDO = '3858')


e o resultado foi

3858    True          QUITADO
3858    True           QUITADO
3858    True            QUITADO
3858    False    EM ABERTO


porem eu queria agrupar por COD_PEDIDO de uma forma que ficasse assim:
-Se tenho varios registros com mesmo COD_PEDIDO e todos possuem o STATUS igual TRUE.... o resultado vai ser assim (somente uma linha)

3858    True          QUITADO

Agora se tenho varios registros com o mesmo COD_PEDIDO e o campo STATUS for igual a FALSE de todos ou somente de de alguns, o resultado vai apares assim

3858    FALSE    EM ABERTO

ou seja, nao quero que exiba todos os registros, quero que ele agrupe todos os registros para saber se o pedido ainda não foi totalmente pago... se 4 parcelas estiver = true... então QUITADO e se 3 parcelas = true e 1 parcela for igual a FALSE.... então 'EM ABERTO'





Resposta escolhida #490650 - 08/10/2019 12:24:54

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Tenta, colocando Group by COD_PEDIDO,STATUS no final da instrução :

SELECT     COD_PEDIDO, STATUS, (CASE WHEN status = 1 THEN 'QUITADO' ELSE 'EM ABERTO' END) AS Expr1
FROM         parcelas
WHERE     (COD_PEDIDO = '3858')
GROUP BY COD_PEDIDO,STATUS;



Grupo DotNet.Br no FaceBook

Grupo WhatsDev



#490652 - 08/10/2019 12:34:32

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Agora que li o final do seu post....
Neste caso teria que fazer um SP(stored procedure), retornando uma das duas situações.
Caso o Count de um select seja = 1, seu pedido estaria quitado, ou em aberto.
Caso o Colunt do select seja = 2, seu pedido estaria com parcelas pagas e parcelas em aberto(o que seria a opção "Em Aberto" a ser retornada)


Grupo DotNet.Br no FaceBook

Grupo WhatsDev



#490653 - 08/10/2019 12:44:09

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Algo assim :

set @registros = (SELECT  COUNT(COD_PEDIDO), @status:=STATUS, (CASE WHEN status = 1 THEN 'QUITADO' ELSE 'EM ABERTO' END) AS Expr1
FROM         parcelas
WHERE     (COD_PEDIDO = '3858')
GROUP BY COD_PEDIDO,STATUS;);

IF @registros = 1 then
   IF @status = 1 then
      SELECT COD_PEDIDO, STATUS,  'QUITADO' AS Expr1 FROM parcelas WHERE     (COD_PEDIDO = '3858');
   ELSE IF @status != 1 then
      SELECT COD_PEDIDO, STATUS,  'EM ABERTO' AS Expr1 FROM parcelas WHERE     (COD_PEDIDO = '3858');
   END IF;
ELSE
    SELECT COD_PEDIDO, STATUS,  'EM ABERTO' AS Expr1 FROM parcelas WHERE     (COD_PEDIDO = '3858');
END IF;


Acredito que até de para fazer em uma única consulta, porém teria que utilizar o Having verificando o status;



Grupo DotNet.Br no FaceBook

Grupo WhatsDev



 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por AMELINHACODE em 15/10/2019 09:32:06