SELECT COL1 + COL2 als CalcColumn, * FROM TABLE WITH (NOLOCK) WO 100 <COL1 + COL2

In einer SELECT-statement, die eine Bedingung auf der Grundlage eines berechneten Wertes verwendet, ist es möglich, diesen berechneten Wert einzuschließen, ohne den berechneten Wert zweimal zu berechnen – einmal in der Auswahl und wieder in der Bedingung?

Ich verwende SQL server 2000.

Du könntest alles in eine Unterabfrage stellen und daraus wählen

SQL-statement

SELECT * FROM ( SELECT COL1 + COL2 as CalcColumn FROM Table ) q WHERE 100 < CalcColumn 

aber als performance, erwarte ich, dass dies langsamer als Ihre ursprüngliche Abfrage ist.

Es sollte keinen signifikanten performancesverlust geben, wenn Sie die Abfrage verwenden, wie Sie es geschrieben haben. SQL behandelt es für dich, glaube ich. Meine Frage wäre, warum benutzt man Software aus dem vorherigen Jahrhundert?

Ich habe gerade versucht

 SELECT Debit, Credit, Debit+Credit AS CalcColumn FROM JDT1 WHERE CalcColumn > 100 

auf SQL 2005, wie von ein paar Jungs vorgeschlagen und der Fehler ist: Msg 207, Level 16, State 1, Line 1 Ungültiger Spaltenname 'CalcColumn'.

 SELECT COL1+COL2 as CalcColumn,* FROM TABLE WITH (NOLOCK) WHERE 100 < CalcColumn 

Ich hoffe, das hilft.

Ich schaffe normalerweise eine view, um auch wiederverwendbare Berechnungsspalten zu haben.

 CREATE VIEW TableView AS SELECT COL1+COL2 as CalcColumn,* FROM TABLE WITH (NOLOCK) GO SELECT * FROM TableView WHERE 100 < CalcColumn