SQL Server: Effizientes Ermitteln des Mindestwerts über mehrere Spalten hinweg
Das Finden des Mindestwerts über mehrere Spalten in einer SQL Server-Tabelle ist eine häufige Aufgabe der Datenanalyse. Dieser Artikel stellt effiziente Methoden vor, um dies zu erreichen, und konzentriert sich dabei auf SQL Server 2005 und höher.
Nehmen wir eine Tabelle mit den Spalten „Col1“, „Col2“ und „Col3“ an. Unser Ziel ist es, eine neue Spalte „TheMin“ zu erstellen, die den Mindestwert aus diesen drei Spalten für jede Zeile enthält.
Methode 1: CASE-Ausdrücke verwenden
Ein einfacher Ansatz verwendet einen CASE-Ausdruck, um die Spaltenwerte zu vergleichen und das Minimum zuzuweisen. Dies ist für eine kleine Anzahl von Spalten effizient:
<code class="language-sql">SELECT Id, CASE WHEN Col1 < Col2 AND Col1 < Col3 THEN Col1 WHEN Col2 < Col1 AND Col2 < Col3 THEN Col2 ELSE Col3 END AS TheMin FROM YourTableNameHere;</code>
Diese CASE-Anweisung vergleicht die Werte und wählt den kleinsten aus.
Methode 2: UNPIVOT für mehrere Spalten verwenden
Beim Umgang mit vielen Spalten bietet der UNPIVOT-Operator eine skalierbarere Lösung. UNPIVOT wandelt mehrere Spalten in eine einzige Spalte um und ermöglicht so eine einfache Aggregation:
<code class="language-sql">WITH cte (ID, Col1, Col2, Col3) AS ( SELECT ID, Col1, Col2, Col3 FROM TestTable ) SELECT cte.ID, Col1, Col2, Col3, TheMin FROM cte JOIN ( SELECT ID, MIN(Amount) AS TheMin FROM cte UNPIVOT (Amount FOR AmountCol IN (Col1, Col2, Col3)) AS unpvt GROUP BY ID ) AS minValues ON cte.ID = minValues.ID;</code>
UNPIVOT formt die Daten um, dann findet MIN() das Minimum innerhalb jeder ID-Gruppe. Das Ergebnis wird wieder mit der Originaltabelle verknüpft. Diese Methode ist mit einer größeren Anzahl von Spalten wartbarer und effizienter als verschachtelte CASE-Anweisungen.
Das obige ist der detaillierte Inhalt vonWie kann der Mindestwert über mehrere Spalten hinweg in SQL Server effizient ermittelt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!