none
"Case When" com select em outra tabela - RESOLVIDO RRS feed

  • Pergunta

  • Bom dia

    estou precisando fazer uma consulta no meu db (SQL Server 2000) com comparações em base em outra tabela,

     

    TabNota

    CodNota (chave primaria - int)

    CodPedido (chave estrandeira - int)

    StatusPago (int) (0 - cobrado, 1 - pago)

     

    TabCobranca

    NumS(chave primaria - int)

    ......

    uma mesma cobrança pode ter várias nota (NumS - 1 para mtos - CodPedido)

     

    precisaria que retornasse o seguinte

    Se todas as notas estiverem com status 1

    retorne 'Pago'

    Se todas as notas estiverem com status 0

    retorne 'Cobrado'

    Se tiver status=1 e status=2

    retorne 'Parcial'

    Se não possuir nota

    retorne 'Pendente'

     

    Code Snippet

    SELECT     CASE WHEN (Nums IN
                              (SELECT     CodPedido
                                FROM          TabNota
                                WHERE      StatusPago = 1 AND CodPedido = NumS)) AND (Nums IN
                              (SELECT     CodPedido
                                FROM          TabNota
                                WHERE      StatusPago = 0 AND CodPedido = NumS)) THEN 'Parcial' WHEN (Nums IN
                              (SELECT     CodPedido
                                FROM          TabNota
                                WHERE      StatusPago = 0 AND CodPedido = NumS)) AND NOT (Nums IN
                              (SELECT     CodPedido
                                FROM          TabNota
                                WHERE      StatusPago = 1 AND CodPedido = NumS)) THEN 'Cobrado' WHEN (Nums IN
                              (SELECT     CodPedido
                                FROM          TabNota
                                WHERE      StatusPago = 1 AND CodPedido = NumS)) AND NOT (Nums IN
                              (SELECT     CodPedido
                                FROM          TabNota
                                WHERE      StatusPago = 0 AND CodPedido = NumS)) THEN 'Pago' ELSE 'Pendente' END AS Tipo
    FROM         TabCobranca
    ORDER BY Nums DESC

     

     

    O Problema é que retorna "Cobrado" mesmo quando esta Parcial ou Pago

     

    Alguém poderia me ajudar?

    segunda-feira, 19 de janeiro de 2009 13:09

Respostas

  • André,


    Você já verificou se a condição criada para verificar se o StatusPago esta certo?

    segunda-feira, 19 de janeiro de 2009 13:18
  •  Junior Galvão - MVP wrote:

    André,


    Você já verificou se a condição criada para verificar se o StatusPago esta certo?

     

    Verifiquei a tabela TabNota e constatei que estava com tipo diferente nos campos para comparação, na verdade o statuspago estava como string e não como integer, além de conter mtos campos nulo.

     

    Corrigi a tabela e funcionou o código

    Obrigado

    segunda-feira, 19 de janeiro de 2009 13:33

Todas as Respostas

  • André,


    Você já verificou se a condição criada para verificar se o StatusPago esta certo?

    segunda-feira, 19 de janeiro de 2009 13:18
  •  Junior Galvão - MVP wrote:

    André,


    Você já verificou se a condição criada para verificar se o StatusPago esta certo?

     

    Verifiquei a tabela TabNota e constatei que estava com tipo diferente nos campos para comparação, na verdade o statuspago estava como string e não como integer, além de conter mtos campos nulo.

     

    Corrigi a tabela e funcionou o código

    Obrigado

    segunda-feira, 19 de janeiro de 2009 13:33
  • André,

     

    Obrigado pelo retorno.

    segunda-feira, 19 de janeiro de 2009 16:02