Comment effectuer un IF...THEN
dans une SQL SELECT
déclaration?
Par exemple:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
sql
sql-server
tsql
if-statement
case
Eric Labashosky
la source
la source
WHERE
etCHECK
nonSELECT
.Réponses:
L'
CASE
instruction est la plus proche de IF dans SQL et est prise en charge sur toutes les versions de SQL Server.Vous n'avez besoin de le faire que
CAST
si vous voulez que le résultat soit une valeur booléenne. Si vous êtes satisfait d'unint
, cela fonctionne:CASE
les instructions peuvent être intégrées dans d'autresCASE
instructions et même incluses dans des agrégats.SQL Server Denali (SQL Server 2012) ajoute l' instruction IIF qui est également disponible en accès (souligné par Martin Smith ):
la source
La déclaration de cas est votre ami dans cette situation et prend l'une des deux formes suivantes:
Le cas simple:
Le cas étendu:
Vous pouvez même mettre des déclarations de cas dans une clause order by pour un classement vraiment sophistiqué.
la source
AS Col_Name
après leEND
pour nommer la colonne résultanteÀ partir de SQL Server 2012, vous pouvez utiliser la
IIF
fonction pour cela.Il s'agit en fait d'une manière d'écriture abrégée (bien que non standard SQL)
CASE
.Je préfère la concision par rapport à la
CASE
version étendue .Les deux
IIF()
etCASE
résolvent en tant qu'expressions dans une instruction SQL et ne peuvent être utilisés qu'à des endroits bien définis.Si vos besoins ne peuvent pas être satisfaits par ces limitations (par exemple, un besoin de renvoyer des jeux de résultats de forme différente en fonction d'une condition), SQL Server possède également un
IF
mot-clé procédural .Cependant, il faut parfois prendre soin d'éviter les problèmes de reniflage des paramètres avec cette approche .
la source
Vous pouvez trouver de bons exemples dans The Power of SQL CASE Statements , et je pense que la déclaration que vous pouvez utiliser sera quelque chose comme ça (de 4guysfromrolla ):
la source
Cas d'utilisation. Quelque chose comme ça.
la source
la source
Microsoft SQL Server (T-SQL)
Dans un
select
, utilisez:Dans une
where
clause, utilisez:la source
where Obsolete = 'N' or InStock = 'Y'
et couper le où en deux pratiquementA partir de ce lien , nous pouvons comprendre
IF THEN ELSE
en T-SQL:N'est-ce pas assez bon pour T-SQL?
la source
la source
Instruction if-else simple dans SQL Server:
Instruction Nested If ... else dans SQL Server -
la source
SELECT
comme l'OP l'a demandé?Une nouvelle fonctionnalité, IIF (que nous pouvons simplement utiliser), a été ajoutée dans SQL Server 2012:
la source
Utilisez une instruction CASE:
la source
Utilisez une logique de bits purs:
Voir la démonstration de travail: si alors sans
case
dans SQL Server .Pour commencer, vous devez déterminer la valeur de
true
etfalse
pour les conditions sélectionnées. Voici deux NULLIF :combinés ensemble donne 1 ou 0. Ensuite, utilisez des opérateurs au niveau du bit .
C'est la méthode la plus WYSIWYG .
la source
la source
la source
la source
Ce n'est pas une réponse, juste un exemple d'une instruction CASE utilisée lorsque je travaille. Il a une instruction CASE imbriquée. Maintenant tu sais pourquoi mes yeux sont croisés.
la source
CASE
demande juste pourquoi devenir voté et marqué comme une réponse au lieu de ceIF
qui aurait dû être la réponse, comme celle-ci, c'est toujours uneCASE
déclaration, pas uneIF
.Si vous insérez des résultats dans une table pour la première fois, plutôt que de transférer des résultats d'une table à une autre, cela fonctionne dans Oracle 11.2g:
la source
Comme solution alternative à la
CASE
déclaration, une approche basée sur les tables peut être utilisée:Résultat:
la source
la source
Pour ceux qui utilisent SQL Server 2012, IIF est une fonctionnalité qui a été ajoutée et fonctionne comme une alternative aux instructions Case.
la source
la source
Vous pouvez avoir deux choix pour que cela soit réellement implémenté:
En utilisant IIF, qui a été introduit à partir de SQL Server 2012:
En utilisant
Select Case
:la source
Question:
ANSI:
L'utilisation d'alias -
p
dans ce cas - permettra d'éviter les problèmes.la source
L'utilisation de SQL CASE est similaire aux instructions If / Else normales. Dans la requête ci-dessous, si la valeur obsolète = 'N' ou si la valeur InStock = 'Y', alors la sortie sera 1. Sinon, la sortie sera 0. Ensuite, nous mettons cette valeur 0 ou 1 sous la colonne vendable.
la source
If..Then...Else..
instructions sont utiliséesSQL
comme suit ....la source
Ce sera quelque chose comme ça:
la source
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';
Par souci d'exhaustivité, j'ajouterais que SQL utilise une logique à trois valeurs. L'expression:
Pourrait produire trois résultats distincts:
Ainsi, par exemple, si un produit est obsolète mais que vous ne savez pas si le produit est en stock, vous ne savez pas si le produit est vendable. Vous pouvez écrire cette logique à trois valeurs comme suit:
Une fois que vous avez compris comment cela fonctionne, vous pouvez convertir trois résultats en deux résultats en décidant du comportement de null. Par exemple, cela traiterait null comme non vendable:
la source
J'aime l'utilisation des instructions CASE mais la question demandait une instruction IF dans le SQL Select. Ce que j'ai utilisé dans le passé a été:
C'est comme les instructions IF Excel ou Sheet où il y a une conditionnelle suivie de la vraie condition puis de la fausse condition:
De plus, vous pouvez imbriquer les instructions if (mais alors utiliser doit utiliser un CASE :-)
(Remarque: cela fonctionne dans MySQLWorkbench mais peut ne pas fonctionner sur d'autres plates-formes)
la source
Vous pouvez utiliser la déclaration de cas:
la source