Как я могу сделать SELECT с предложением IF - PullRequest
1 голос
/ 13 февраля 2012

Как мне сделать выбор, если ЕСЛИ San_Cliente.NomeCompleto НЕ НЕДОСТУПЕН ТО, ЧЕМ San_Cliente.Excluido = 0?

В настоящее время это мой SELECTнужно поставить AND Client.Deleted = 0, но только если Client.CompleteName не равно NULL.

Как я могу это сделать?

Ответы [ 3 ]

3 голосов
/ 14 февраля 2012

В самом конце добавить это условие

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

Таким образом, если San_Cliente.NomeCliente равно нулю, запись проходит предложение WHERE.
Когда он IS NOT NULL, то он проверяет дополнительный фильтр.

Подводя итог,

  • ЕСЛИ San_Cliente.NomeCompleto НЕ НУЖНО, ТОГДА это условие добавляется в предложение WHERE: AND San_Cliente.Excluido = 0
  • ЕСЛИ San_Cliente.NomeCompleto равен NULL, то условие НЕ добавлено
1 голос
/ 14 февраля 2012

Использовать объединение

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
1 голос
/ 14 февраля 2012

Вы хотите:

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

Возможно, есть более краткий способ представить эту логическую ситуацию, но я думаю, что, несмотря ни на что, она будет наиболее ясной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...