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!

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top