dans le serveur SQL, devez sélectionner l'une des deux colonnes, peut une déclaration de cas faire?
-
18-09-2019 - |
Question
Mon tableau:
Les utilisateurs (ID utilisateur, col1, col2)
Je veux faire une procédure générique stockée, mais je dois retourner soit col1 ou col2 dans une requête.
déclaration Puis-je affaire gérer cette situation?
SELECT userID, col1 Des utilisateurs
ou
SELECT userID, col2 Des utilisateurs
La solution
Utilisation CASE:
SELECT t.userid,
CASE
WHEN [something to evaluate why to show col1 vs col2 ] THEN
t.col1
ELSE
t.col2
END
FROM USERS t
Utilisation COALESCE:
SELECT t.userid,
COALESCE(t.col1, t.col2)
FROM USERS t
COALESCE renvoie la première valeur de colonne qui est non nulle, à partir de la gauche.
Autres conseils
Oui, tant que vous ne me dérange pas de retourner les mêmes noms de colonnes:
SELECT userID, ArbitraryCol = CASE WHEN @param = 1 then col1 ELSE col2 END
FROM Users
Si vous avez besoin des en-têtes de colonnes pour changer, vous devez utiliser l'instruction IF
IF @param = 1
BEGIN
SELECT userID, col1 FROM Users
END
ELSE
BEGIN
SELECT userID, col2 FROM Users
END
Je pense que quelque chose comme SQL Server 2000/2005 cela.
select
UserID,
case UserID
when 1 then Col1
when 2 then Col2
else 'boo'
end as SpecialSituation
from
Users
Il peut, en supposant que vous avez une expression logique pour le moment de revenir col1 au lieu de col2:
SELECT USERID CASE WHEN USERTYPE='X' THEN COL1 ELSE COL2 END FROM USERS
Si col1 et col2 sont de différents types, vous devez utiliser CAST ou CONVERT pour convertir un à l'autre.