SQL Server 2000: Return „wahr“ oder „falsch“, basierend auf all 1 von 25 Spalten sind „true“
-
06-07-2019 - |
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!
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