Usuário com melhor resposta
"Case When" com select em outra tabela - RESOLVIDO

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 SnippetSELECT 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 DESCO Problema é que retorna "Cobrado" mesmo quando esta Parcial ou Pago
Alguém poderia me ajudar?
Respostas
-
-
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
Todas as Respostas
-
-
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
-