Bedingte WHERE-Klausel in SQL Server: Implementierung und Alternativen
In SQL Server können Sie mit der bedingten WHERE-Klausel Filterbedingungen basierend auf dem Wert eines bestimmten Ausdrucks dynamisch anwenden. Stellen Sie sich das folgende Szenario vor:
Sie möchten Daten aus einer Tabelle abrufen, in der die Spalte DateDropped
mit einem bestimmten Wert übereinstimmt. Sie möchten jedoch auch einen zusätzlichen Filter anwenden, der auf einem Parameter namens @JobsOnHold
basiert. Wenn @JobsOnHold
auf 1 gesetzt ist, möchten Sie Datensätze einschließen, bei denen DateAppr
größer oder gleich 0 ist. Andernfalls möchten Sie Datensätze ausschließen, bei denen DateAppr
gleich 0 ist.
Die ursprüngliche Abfrage, die Sie eingegeben haben, ist falsch. Die korrekte Syntax für eine bedingte WHERE-Klausel mit CASE lautet:
<code class="language-sql">WHERE DateDropped = 0 AND CASE WHEN @JobsOnHold = 1 THEN DateAppr >= 0 ELSE DateAppr != 0 END</code>
Es gibt jedoch eine einfachere Alternative, die nicht die Verwendung von CASE erfordert:
<code class="language-sql">WHERE DateDropped = 0 AND ( (ISNULL(@JobsOnHold, 0) = 1 AND DateAppr >= 0) OR (ISNULL(@JobsOnHold, 0) != 1 AND DateAppr != 0) )</code>
In dieser Version wird die Funktion ISNULL
verwendet, um Fälle zu behandeln, in denen @JobsOnHold
NULL sein kann. Der Standardwert von @JobsOnHold
ist auf 0 gesetzt, um sicherzustellen, dass die Abfrage auch dann korrekt ausgeführt wird, wenn dem Parameter kein Wert zugewiesen ist.
Die bedingte WHERE-Klausel verstehen
Die bedingte WHERE-Klausel wertet einen Ausdruck aus und filtert die Ergebnisse danach, ob der Ausdruck wahr oder falsch ist. Wenn der Ausdruck wahr ist, wird die Zeile in die Ergebnismenge aufgenommen. Andernfalls wird die Zeile ausgeschlossen.
Bedingungen Die Bedingungen in der WHERE-Klausel können beliebig komplex sein und ermöglichen eine hochgradig anpassbare Filterung. Sie können beispielsweise eine Abfrage erstellen, die alle innerhalb der letzten 24 Stunden hinzugefügten Datensätze ausschließt oder nur Datensätze mit einem bestimmten Statuscode einbezieht.
Alternativen zur bedingten WHERE-Klausel
In einigen Fällen gibt es möglicherweise Alternativen, um die gewünschten Ergebnisse zu erzielen, ohne eine bedingte WHERE-Klausel zu verwenden. Sie können beispielsweise die Funktion COALESCE
verwenden, um den Fall zu behandeln, in dem @JobsOnHold
NULL ist. Alternativ können Sie für jeden möglichen Wert von @JobsOnHold
zwei separate Abfragen erstellen.
Die bedingte WHERE-Klausel bietet jedoch eine präzise und effiziente Möglichkeit, komplexe Filterlogik auf Ihre SQL-Abfragen anzuwenden. Wenn Sie verstehen, wie sie funktionieren und welche Alternativen es gibt, können Sie sie effektiv nutzen, um die benötigten Daten abzurufen.
Das obige ist der detaillierte Inhalt vonWie implementiert man bedingte WHERE-Klauseln in SQL Server mit Alternativen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!