Case com vários campos

808 views
Skip to first unread message

Jhosef Marks

unread,
Oct 6, 2011, 8:09:35 AM10/6/11
to sql-serv...@googlegroups.com, fireb...@yahoogrupos.com.br
Bom dia, 

Estou montando um select para a tabela financeira, onde busco uma fatura e vinculada ou não a um cliente. Quando ela tiver vinculo vou trazer o código, nome e documento desse cliente, quando não houver vinculo isso trás NULL nesses campos, gostaria de usar apenas um CASE WHEN ,,, END para tratar esses 3 campos e substituir o NULL por outros valores, isso é possível ou vou ter que fazer um CASE para cada campo? Hoje tenho dessa forma o meu SQL,

SELECT CASE 
         WHEN CD_CLIENTE IS NULL THEN '000000' 
         ELSE CD_CLIENTE
       END CD_CLIENTE,
       CASE 
         WHEN NOME IS NULL THEN 'CLIENTE NÃO INFORMADO' 
         ELSE NOME
       END NOME, 
       .
       .
       .
  FROM TB_FATURA
  LEFT JOIN TB_CLIENTE
    ON TB_FATURA.CD_CLIENTE = TB_CLIENTE.CD_CLIENTE
       .
       .
       .
 ORDER BY CD_CLIENTE

Att,

Jhosef Marks de Carvalho
Celular: (47) 9619-8825
skype: jhosef.marks
Twitter: @jhosefmarks

Jesus está voltando!!!

"E se o meu povo, que se chama pelo meu nome, se humilhar, e orar, e buscar a minha face e se converter dos seus maus caminhos, então eu ouvirei dos céus, e perdoarei os seus pecados, e sararei a sua terra." (2 Cr 7:14) 

Jefferson Montija Cirilo

unread,
Oct 6, 2011, 8:21:07 AM10/6/11
to sql-serv...@googlegroups.com
Bom dia Jhosef,
 
    Porque não usa a função ISNULL()
 
Sintaxe:
 
ISNULL ( check_expression , replacement_value )
 
 
Ela funciona mais ou menos assim:
 
Quando retornar o valor de check_expression NULL, substituir por replacement_value.
 
Pode testar:
 
declare @nome char(30)
declare @valor tinyint
 
select IsNull(@nome, 'CLIENTE NÃO INFORMADO') as 'Cliente', ISNULL(@valor, 0) as 'Valor'
set @nome='FULANO'
SET @valor=10
select IsNull(@nome, 'CLIENTE NÃO INFORMADO') as 'Cliente', ISNULL(@valor, 0) as 'Valor'
 
Atenciosamente,
 
Jefferson
--
----------------------
Você recebeu essa mensagem porque você esta inscrito no grupo "SQL Server Brasil" do Google Groups.
Para postar nesse grupo, envie mensagem para sql-serv...@googlegroups.com
Para sair desse grupo, envie mensagem para sql-server-bra...@googlegroups.com
Para mais opções, visite a página desse grupo em http://groups.google.com/group/sql-server-brasil
----------------------
You received this message because you are subscribed to the Google Groups "SQL Server Brasil" group.
To post to this group, send email to sql-serv...@googlegroups.com
To unsubscribe from this group, send email to sql-server-bra...@googlegroups.com
For more options, visit this group at http://groups.google.com/group/sql-server-brasil

Jhosef Marks

unread,
Oct 6, 2011, 8:27:07 AM10/6/11
to sql-serv...@googlegroups.com
É verdade, esqueci do IsNull... rs

Vlw pela dica, mas mesmo assim a pergunta pro Case com vários campos é válida para outros casos que eu tenho aqui.

Att,

Jhosef Marks de Carvalho
Celular: (47) 9619-8825
skype: jhosef.marks
Twitter: @jhosefmarks

Jesus está voltando!!!

"E se o meu povo, que se chama pelo meu nome, se humilhar, e orar, e buscar a minha face e se converter dos seus maus caminhos, então eu ouvirei dos céus, e perdoarei os seus pecados, e sararei a sua terra." (2 Cr 7:14) 



Renan Henrique

unread,
Oct 6, 2011, 8:43:50 AM10/6/11
to sql-serv...@googlegroups.com

Tinha pensado no IsNull também, mas o problema real é que não entendi muito bem a pergunta, rs.

 

Renan Henrique
Analista Desenvolvedor .Net/SQL

MCTS - Microsoft Certified Technology Specialist
GTalk - MSN:
rena...@gmail.com 

Jhosef Marks

unread,
Oct 6, 2011, 9:00:27 AM10/6/11
to sql-serv...@googlegroups.com
Vou dar outro exemplo:

Se a minha fatura estiver quitada eu preciso dos campos VL_PGTO e DT_PGTO, se ela tiver em aberto vou pegar os campos VL_VENC e DT_VENC, caso esteja cancelada vou pegar o VL_DOC e DT_DOC

para essa situação e precisaria fazer um CASE para cada um desses campos, e tivesse mais campos que mudassem de acordo com essa condição eu teria que alterar esses cases tbem.

como colocar isso em um único CASE? 

O que eu queria é algo mais ou menos assim:

CASE STATUS 
  WHEN 1 THEN VL_VENC, DT_VENC
  WHEN 2 THEN VL_PGTO, DT_PGTO
  WHEN 3 THEN VL_DOC, DT_DOC
END ???, ???

Att,

Jhosef Marks de Carvalho
Celular: (47) 9619-8825
skype: jhosef.marks
Twitter: @jhosefmarks

Jesus está voltando!!!

"E se o meu povo, que se chama pelo meu nome, se humilhar, e orar, e buscar a minha face e se converter dos seus maus caminhos, então eu ouvirei dos céus, e perdoarei os seus pecados, e sararei a sua terra." (2 Cr 7:14) 



Jefferson Montija Cirilo

unread,
Oct 6, 2011, 9:28:58 AM10/6/11
to sql-serv...@googlegroups.com
Jhosef,
 
    Ao meu entender, você vai precisar de uma estrutura CASE para cada atributo ou você pode criar sua própria função para receber todos os valores e retorná-los com a devida formatação.
    Você tem muitas opções para fazer isso sem usar necessariamente o CASE.

Jhosef Marks

unread,
Oct 6, 2011, 9:39:07 AM10/6/11
to sql-serv...@googlegroups.com
Minha restrição é o padrão ANSI, não posso fugir disso, pois a aplicação é multi banco.


Att,

Jhosef Marks de Carvalho
Celular: (47) 9619-8825
skype: jhosef.marks
Twitter: @jhosefmarks

Jesus está voltando!!!

"E se o meu povo, que se chama pelo meu nome, se humilhar, e orar, e buscar a minha face e se converter dos seus maus caminhos, então eu ouvirei dos céus, e perdoarei os seus pecados, e sararei a sua terra." (2 Cr 7:14) 



Reply all
Reply to author
Forward
0 new messages