Como executo IF...THEN
uma SQL SELECT
declaração?
Por exemplo:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
sql
sql-server
tsql
if-statement
case
Eric Labashosky
fonte
fonte
WHERE
eCHECK
, mas nãoSELECT
.Respostas:
A
CASE
instrução é a mais próxima de IF no SQL e é suportada em todas as versões do SQL Server.Você só precisa fazer isso
CAST
se desejar o resultado como um valor booleano. Se você está satisfeito com umint
, isso funciona:CASE
instruções podem ser incorporadas em outrasCASE
instruções e até incluídas em agregados.O SQL Server Denali (SQL Server 2012) adiciona a instrução IIF , que também está disponível no acesso (apontada por Martin Smith ):
fonte
A declaração de caso é sua amiga nessa situação e assume uma das duas formas:
O caso simples:
O caso estendido:
Você pode até colocar instruções de caso em uma ordem por cláusula para pedidos realmente sofisticados.
fonte
AS Col_Name
após aEND
nomear a coluna resultanteNo SQL Server 2012, você pode usar a
IIF
função para isso.Esta é efetivamente apenas uma maneira abreviada (embora não padrão do SQL) de escrever
CASE
.Eu prefiro a concisão quando comparado com a
CASE
versão expandida .Ambos
IIF()
eCASE
resolvem como expressões em uma instrução SQL e só podem ser usados em locais bem definidos.Se suas necessidades não puderem ser atendidas por essas limitações (por exemplo, uma necessidade de retornar conjuntos de resultados de formas diferentes, dependendo de alguma condição), o SQL Server também terá uma
IF
palavra-chave de procedimento .Às vezes, deve-se tomar cuidado para evitar problemas de detecção de parâmetros com essa abordagem .
fonte
Você pode encontrar alguns bons exemplos em Instruções do Power of SQL CASE , e acho que a instrução que você pode usar será algo assim (de 4guysfromrolla ):
fonte
Use CASE. Algo assim.
fonte
fonte
Microsoft SQL Server (T-SQL)
Em a
select
, use:Em uma
where
cláusula, use:fonte
where Obsolete = 'N' or InStock = 'Y'
e cortar o onde ao meio praticamenteDesde esta ligação , podemos compreender
IF THEN ELSE
em T-SQL:Isso não é bom o suficiente para o T-SQL?
fonte
fonte
Instrução if-else simples no SQL Server:
Instrução If ... else aninhada no SQL Server -
fonte
SELECT
como OP pediu?Um novo recurso, IIF (que podemos simplesmente usar), foi adicionado no SQL Server 2012:
fonte
Use uma instrução CASE:
fonte
Use lógica de bits pura:
Veja a demonstração de trabalho: se não houver
case
no SQL Server .Para começar, você precisa calcular o valor
true
efalse
para as condições selecionadas. Aí vem dois NULLIF :combinados fornece 1 ou 0. Em seguida, use operadores bit a bit .
É o método mais WYSIWYG .
fonte
fonte
fonte
fonte
Esta não é uma resposta, apenas um exemplo de uma declaração CASE em uso onde eu trabalho. Ele possui uma instrução CASE aninhada. Agora você sabe por que meus olhos estão cruzados.
fonte
CASE
ser votado e marcado como uma resposta em vez daIF
que deveria ter sido a resposta, como esta, essa ainda é umaCASE
afirmação, não umaIF
.Se você estiver inserindo resultados em uma tabela pela primeira vez, em vez de transferir resultados de uma tabela para outra, isso funcionará no Oracle 11.2g:
fonte
Como uma solução alternativa à
CASE
instrução, uma abordagem orientada a tabela pode ser usada:Resultado:
fonte
fonte
Para quem usa o SQL Server 2012, o IIF é um recurso que foi adicionado e funciona como uma alternativa às instruções Case.
fonte
fonte
Você pode ter duas opções para isso realmente implementar:
Usando o IIF, que foi introduzido no SQL Server 2012:
Usando
Select Case
:fonte
Questão:
ANSI:
Usar aliases -
p
neste caso - ajudará a evitar problemas.fonte
O uso do SQL CASE é como as instruções If / Else normais. Na consulta abaixo, se o valor obsoleto = 'N' ou o valor InStock = 'Y', a saída será 1. Caso contrário, a saída será 0. Em seguida, colocamos esse valor 0 ou 1 na coluna Salable.
fonte
If..Then...Else..
uso de instruções daSQL
seguinte maneira ....fonte
Será algo assim:
fonte
SELECT OrderID, Quantity, CASE WHEN Quantity > 30 THEN "The quantity is greater than 30" WHEN Quantity = 30 THEN "The quantity is 30" ELSE "The quantity is under 30" END AS QuantityText FROM OrderDetails WHERE QuantityText = 'The quantity is 30';
Por uma questão de integridade, eu acrescentaria que o SQL usa lógica de três valores. A expressão:
Pode produzir três resultados distintos:
Por exemplo, se um produto é obsoleto, mas você não sabe se o produto é instock, você não sabe se o produto é vendável. Você pode escrever essa lógica de três valores da seguinte maneira:
Depois de descobrir como ele funciona, você pode converter três resultados em dois, decidindo o comportamento de nulo. Por exemplo, isso trataria null como não vendável:
fonte
Eu gosto do uso das instruções CASE, mas a pergunta solicitou uma instrução IF no SQL Select. O que eu usei no passado foi:
É como as instruções IF do excel ou de folhas em que há um condicional seguido pela condição verdadeira e depois pela condição falsa:
Além disso, você pode aninhar as instruções if (mas, em seguida, use deve usar um CASE :-)
(Nota: isso funciona no MySQLWorkbench, mas pode não funcionar em outras plataformas)
fonte
Você pode usar a declaração de caso:
fonte