;WITH cte AS (
SELECT 'Abe' AS Col1, CAST(1 AS BIT) as Col2, CAST(0 AS BIT) as Col3, CAST(1 AS BIT) AS Col4
UNION ALL
SELECT 'Bob' AS Col1, CAST(0 AS BIT) as Col2, CAST(1 AS BIT) as Col3, CAST(0 AS BIT) AS Col4
UNION ALL
SELECT 'Cam' AS Col1, CAST(1 AS BIT) as Col2, CAST(1 AS BIT) as Col3, CAST(1 AS BIT) AS Col4
UNION ALL
SELECT 'AbeWNull' AS Col1, CAST(1 AS BIT) as Col2, CAST(NULL AS BIT) as Col3, CAST(1 AS BIT) AS Col4
)
SELECT *
FROM
cte
WHERE
ISNULL(CAST(Col2 AS INT),0) + ISNULL(Col3,0) + ISNULL(Col4,0) = 2
Die cte
gibt Ihnen einige Testdaten. 2 Dinge. 1 wenn es eine 10 oder bit
Spalte ist, können Sie cast/convert
zu einem integer
oder numeric
Datentyp mindestens eine der Spalten oder der Zusatz wird nicht funktionieren. Und ja, ich habe es getestet und musste es tun. Zweitens, wenn Sie nicht mit dem Potenzial eines null
umgehen, erhalten Sie möglicherweise nicht die Antwort, die Sie wollen.
Zum Beispiel.
SELECT 1 + NULL + 1
geben Sie NULL
SUM
auf einer Spalte nicht das gleiche ist, und es wird nur die nulls
ignorieren, aber nicht während der Zugabe Linie.
können Sie als nützlich bewerten, .. jetzt sind Sie über 15 – scaisEdge
einzige Sache. Wenn alle Spalten Datentyp sind, muss Bit mindestens 1 umwandeln. Wenn eine Null in einer der Spalten vorhanden ist, wird die gesamte Additionsoperation ebenfalls null (aka unbekannt) – Matt
@Matt. Ich habe update die Antwort mit expliziten Konvertierung für Ihren Kommentar – scaisEdge