2012-02-13 49 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