Frage

Ich habe eine select-Anweisung mit berechneten Spalten und ich möchte den Wert einer berechneten Spalte in eine andere.Ist das möglich?Hier ist ein erfundenes Beispiel, um zu zeigen, was ich versuche zu tun.

SELECT [calcval1] = CASE Statement, [calcval2] = [calcval1] * .25
War es hilfreich?

Lösung

Nein.

Alle Ergebnisse einer einzelnen Zeile von einem ausgewählten Atom. Das heißt, man sie alle, als ob sie auftreten parallel anzeigen können und können nicht voneinander abhängig sind.

Wenn Sie berechnete Spalten beziehen sind, dann müssen Sie die Formel der Eingabe aktualisieren für das Ergebnis während einer Auswahl zu ändern.

Denken Sie an berechneten Spalten als Makros oder Mini-Ansichten, die ein wenig Berechnung injizieren, wann immer Sie sie nennen.

Zum Beispiel werden diese Spalten identisch sein, immer:

-- assume that 'Calc' is a computed column equal to Salaray*.25
SELECT Calc, Salary*.25 Calc2 FROM YourTable

Denken Sie auch daran, dass die persisted Option ändert sich nichts davon. Es hält den Wert, um die sich schön für die Indizierung, aber die Unteilbarkeit nicht ändert.

Andere Tipps

Leider nicht wirklich, aber eine Abhilfe, die manchmal ist es wert ist

SELECT [calcval1], [calcval1] * .25 AS [calcval2]
FROM (SELECT [calcval1] = CASE Statement FROM whatever WHERE whatever)

Ja, es ist möglich.

Mit dem MIT Statement für verschachtelte wählt:

Zwei Möglichkeiten, wie ich denken kann, das zu tun. Zuerst verstehen, dass die calval1 Spalte nicht so weit vorhanden ist, wie SQL Server betroffen ist, bis die Anweisung ausgeführt hat, daher ist es nicht direkt Ihr Beispiel als showning verwendet werden kann. So können Sie die Berechnung in dort setzen zweimal, einmal für calval1 und einmal als Ersatz für calcval1 in der calval2 Berechnung. Der andere Weg ist eine abgeleitete Tabelle mit calval1 darin zu machen und dann calval2 außerhalb der abgeleiteten Tabelle etwas zu berechnen, wie:

select calcval1*.25 as calval2, calval1, field1, field2
from (select casestament as cavlval1, field1, field2 from my table) a

Sie müssen sowohl für die Leistung testen.

Sie sollten eine äußere verwenden gelten anstelle eines subselect:

select V.calc,V.calc*0.25 from FOO outer apply (select case Statement as calc) V

Sie können nicht "zurücksetzen" der Wert einer berechneten Spalte in einer Select-Klausel, wenn es das ist, was Sie zu tun versuchen...Der Wert einer berechneten Spalte wird auf der Grundlage der berechneten Spalte Formeln.Die KÖNNEN den Wert einer anderen berechneten Spalte....aber Sie canlt reset die Formeln in einer Select-Klausel...wenn alles, was Sie tun möchten, ist "Ausgabe" der Wert basiert auf zwei berechnete Spalten (da der syntax, die in Ihrer Frage lautet:" Dann die "[calcval2]"
in

SELECT [calcval1] = CASE Statement, [calcval2] = [calcval1] * .25 

würde nur zu einer Spalte alias in der Ausgabe der Select-Klausel.

oder sind Sie Fragen, wie definieren Sie die Formel für eine berechnete Spalte basierend auf einer anderen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top