Sql Server 2000: Renvoie «true» ou «false» en fonction de l’une des 25 colonnes «true».
-
06-07-2019 - |
Question
Je dois créer une requête qui vérifie plusieurs colonnes et si l'une d'entre elles a un 1, je souhaite renvoyer la valeur true.
La sortie idéale serait le long des lignes suivantes:
ID: 55
Nom: John Doe
IsDealerType1: True
IsDealerType2: True
IsDealerType3: False
IsDealerType4: False
IsDealerType5: True
Le problème est qu'au lieu de ces 5 colonnes de revendeur, j'ai environ 20 colonnes nommées 1a, 1b, 1c, 1d, etc. Si l'un des "1" est colonnes est true, alors IsDealerType1 doit l'être.
J'essaie d'éviter d'écrire quelque chose dans le code VB.NET pour vérifier chaque colonne, simplement parce que cette laideur devrait être facile à éviter en SQL - si seulement je savais comment le faire - mais je Je ne sais pas comment construire la requête. J'ai essayé des trucs comme ...
SELECT id,
name,
(1a or 1b or 1c or 1d) as IsDealerType1,
(2a or 2b or 2c or 2d) as IsDealerType2
where id = 55
... mais évidemment, je ne le fais pas bien.
Toute aide est appréciée. Merci!
La solution
J'aime Russel, mais je vais aussi ajouter ceci:
CASE WHEN 1 IN (1a,1b,1c,1d) THEN 1 ELSE 0 END As IsDealerType1
Autres conseils
CAS QUAND (1a + 1b + 1c + 1d) > 0 ALORS 1 AUTRE 0 FIN comme IsDealerType1
Utilisez l'opérateur SQL au niveau du bit OR . Évite les comparaisons et les conversions.
Exemple: les réponses de Joel transmettent le nombre entier 1 ou 0 au client, où vous pouvez vous attendre à bit (booléen). Les réponses de Remus doivent être comparées et comparées.
SELECT id,
name,
(1a | 1b | 1c | 1d) as IsDealerType1,
(2a | 2b | 2c | 2d) as IsDealerType2
where id = 55
En SQL, les types BIT ne peuvent pas être utilisés dans les expressions booléennes (d'oh !!), ils doivent être comparés à ints:
SELECT id, name,
cast(
case when ([1a]=1 or [1b]=1 or [1c]=1 or [1d]=1) then 1 else 0 end
as bit) as IsDealerType1,
cast(case when ([2a]=1 or [2b]=1 or [2c]=1 or [2d]=1) then 1 else 0 end
as bit) as IsDealerType2
from [table]
where id = 55