2012-02-13 76 views
1

我该如何做一个选择,如果San_Cliente.NomeCompleto不是NULL然后San_Cliente.Excluido = 0?我怎样才能做一个SELECT与IF子句

这Nowaday是我的选择

SELECT Key.Key_Id, 
     Key.User_Id, 
     Key.From, 
     su.CompleteName, 
     Key.Company_Id, 
     Key.User_Id_Responsible, 
     Key.DateTime, 
     Key.Transaction, 
     Key.Client_Id, 
     Key.DateTimeGet, 
     Key.DateTimeDelivered, 
     Key.Hours, 
     Key.ResponsibleName, 
     Key.PersonalId, 
     User.CompleteName AS NomeUsuarioVenda, 
     Client.CompleteName 
FROM San_Chave 
JOIN User 
    ON Key.User_Id_Responsible = User.User_Id 
JOIN User su 
    ON Key.User_Id = su.User_Id 
LEFT OUTER JOIN Client 
    ON Key.Client_Id = Client.Client_Id 
WHERE (Key.Delivered = 0 OR Key.Delivered is NULL) 
    and Key.From = 14 
    AND User.Deleted = 0 

在我的WHERE子句中,我需要把与Client.Deleted = 0,只是如果Client.CompleteName不为空。

我该怎么做?

+0

你的表和字段名称都写在奇怪的话我也不了解。 – 2012-02-13 19:59:50

+0

让我翻译,我会编辑我的文章。 – 2012-02-13 20:00:44

+1

对不起,我更新了我的帖子 – 2012-02-13 20:05:39

回答

3

在最后,添加此条件

AND (San_Cliente.NomeCliente is null OR San_Cliente.Excluido = 0) 

所以,如果San_Cliente.NomeCliente为空,则记录通过WHERE子句。
当它IS NOT NULL,然后它检查额外的过滤器。

总之,

  • IF San_Cliente.NomeCompleto IS NOT NULL那么这个条件被添加到WHERE子句:AND San_Cliente.Excluido = 0
  • IF San_Cliente.NomeCompleto为null,则该条件没有被添加
+0

但是我需要把San_Cliente.Excluido = 0,只是如果San_Cliente.NomeCompleto为null。 – 2012-02-13 20:57:31

+0

这是哪一个?你的问题陈述'但只是如果Client.CompleteName是'**不**''null' – RichardTheKiwi 2012-02-13 21:03:16

+0

是的,我很抱歉。 JUST如果Client.CompleteName不为空。如果Client.CompleteName不为null,则必须将Client.Deleted = 0 – 2012-02-13 21:15:22

1

您想要:

(San_Chave.NomeCompleto IS NULL or (San_Cliente.NomeCompleto IS NOT NULL AND San_Cliente.Excluido = 0)) 

可能有一个mor简洁的方式来表示这种合乎逻辑的情况,但我认为这将是最明确的。

+0

确保您确切地知道您问的是什么问题:使用NomeCompleto创建一个真值表,在一个坐标轴上为/不为零,并且Excluido在另一个坐标上不等于0,并确定您是要包含还是排除该行基于此。如果答案不明显,告诉我你的真值表,我会试着建议使其工作的WHERE条件。 – 2012-02-13 21:15:52

+0

JUST如果Client.CompleteName不为空。如果Client.CompleteName不为空,则必须将其放在Client.Deleted = 0 – 2012-02-13 21:17:16

+0

这就像它是编程语言中的函数,而不是SQL查询。制作真值表将帮助您将问题形成SQL查询。 http://en.wikipedia.org/wiki/Truth_table – 2012-02-13 21:22:05

1

使用合并

coalesce(San_Cliente,0) = 0 

http://msdn.microsoft.com/en-us/library/ms190349.aspx

SELECT San_Chave.Chave_Id, San_Chave.Usuario_Id, San_Chave.De, su.NomeCompleto, 
San_Chave.Credenciada_Id, San_Chave.Usuario_Id_Responsavel, San_Chave.DataHora, 
San_Chave.Transacao, San_Chave.Cliente_Id, San_Chave.DataHoraPegou, 
San_Chave.DataHoraDevolverPrevisao, San_Chave.DataHoraEntregou, 
San_Chave.HorasDevolucao, San_Chave.NomeResponsavel, San_Chave.CpfResponsavel, 
San_Chave.RgResponsavel, San_Chave.TelResponsavel, San_Chave.Tel2Responsavel, 
San_Chave.Endereco, San_Chave.Devolvido, San_Chave.TextoDevolucao, 
San_Usuario.NomeCompleto AS NomeUsuarioVenda, San_Cliente.NomeCompleto 
FROM San_Chave JOIN San_Usuario 
ON San_Chave.Usuario_Id_Responsavel = San_Usuario.Usuario_Id 
JOIN San_Usuario su 
ON San_Chave.Usuario_Id = su.Usuario_Id 
LEFT OUTER JOIN San_Cliente 
ON San_Chave.Cliente_Id = San_Cliente.Cliente_Id 
WHERE (San_Chave.Devolvido = 0 OR San_Chave.Devolvido is NULL) 
and San_Chave.De = 14 
AND San_Usuario.Excluido = 0 
AND coalesce(San_Cliente,0) = 0