Frage

Ich habe eine Abfrage erstellen, die über mehrere verschiedene Spalten überprüft, und wenn einer von ihnen eine 1 haben, ich möchte true zurück.

Ideal Ausgang entlang der Linien würde:

ID: 55
Name: John Doe
IsDealerType1: Wahre
IsDealerType2: Wahre
IsDealerType3: False
IsDealerType4: False
IsDealerType5: Wahr

Das Problem ist, statt dies 5 Händlern Spalten, ich habe etwa 20 Spalten mit der Bezeichnung 1a, 1b, 1c, 1d, usw. Wenn eine der „1“ Spalten wahr ist, dann sollte IsDealerType1 wahr sein.

Ich versuche, etwas in dem VB.NET-Code zu vermeiden, schreibe jede und jeden Spalt zu überprüfen, nur weil die schiere Hässlichkeit einfach sein sollte in SQL zu vermeiden - wenn ich nur weiß, wie es zu tun - aber ich bin nicht sicher, wie die Abfrage zu konstruieren. Ich habe versucht worden, solche Sachen ...

SELECT id, 
      name, 
      (1a or 1b or 1c or 1d) as IsDealerType1, 
      (2a or 2b or 2c or 2d) as IsDealerType2 
where id = 55

... aber natürlich, ich tue es nicht richtig.

Jede Hilfe ist willkommen. Dank!

War es hilfreich?

Lösung

Ich mag Russel, aber ich werde diese als auch hinzufügen:

CASE WHEN 1 IN (1a,1b,1c,1d) THEN 1 ELSE 0 END As IsDealerType1

Andere Tipps

CASE WHEN (1a + 1b + 1c + 1d)> 0 THEN ELSE 1 0 END als IsDealerType1

Mit dem SQL bitweise OR Operator. Vermeidet Vergleiche und Würfe.

Beispiel: Joels Antworten gibt ganze Zahl 1 oder 0 an den Client, wo Sie würden wohl Bit (boolean) erwarten. Remus' Antworten brauchen Abgüsse und Vergleiche.

SELECT id, 
      name, 
      (1a | 1b | 1c | 1d) as IsDealerType1, 
      (2a | 2b | 2c | 2d) as IsDealerType2 
where id = 55

In SQL die BIT-Typen können nicht in Booleschen Ausdrücken verwendet werden (d'oh !!), müssen sie mit ints verglichen werden:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top