Domanda

Ho un'istruzione select con colonne calcolate e vorrei usare il valore di una colonna calcolata in un'altra. È possibile? Ecco un esempio inventato per mostrare cosa sto cercando di fare.

SELECT [calcval1] = CASE Statement, [calcval2] = [calcval1] * .25
È stato utile?

Soluzione

No.

Tutti i risultati di una singola riga da una selezione sono atomici. Cioè, puoi visualizzarli tutti come se si verificassero in parallelo e non potessero dipendere l'uno dall'altro.

Se ti riferisci a colonne calcolate, devi aggiornare l'input della formula affinché il risultato cambi durante una selezione.

Pensa alle colonne calcolate come macro o mini-viste che iniettano un piccolo calcolo ogni volta che le chiami.

Ad esempio, queste colonne saranno identiche, sempre:

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

Tieni inoltre presente che l'opzione persistente non cambia nulla di tutto ciò. Mantiene il valore attorno al quale è piacevole per l'indicizzazione, ma l'atomicità non cambia.

Altri suggerimenti

Sfortunatamente non proprio, ma una soluzione alternativa che a volte ne vale la pena è

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

Sì, è possibile.

Utilizza l'istruzione WITH per le selezioni nidificate:

Due modi in cui posso pensare di farlo. In primo luogo capire che la colonna calval1 non esiste per quanto riguarda SQL Server fino a quando non viene eseguita l'istruzione, pertanto non può essere utilizzata direttamente come mostrato nell'esempio. Quindi puoi inserire il calcolo due volte, una volta per calval1 e una volta come sostituzione per calcval1 nel calcolo calval2. L'altro modo è creare una tabella derivata con al suo interno calval1 e quindi calcolare calval2 all'esterno della tabella derivata in modo simile:

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

Dovrai testare entrambe le prestazioni.

Dovresti usare una domanda esterna invece di una sottoselezione:

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

Non puoi " resettare " il valore di una colonna calcolata in una clausola Select, se è quello che stai cercando di fare ... Il valore di una colonna calcolata si basa sulle formule di colonna calcolate. Quale CAN può includere il valore di un'altra colonna calcolata .... ma non puoi resettare le formule in una clausola Select ... se tutto ciò che vuoi fare è "output". il valore basato su due colonne calcolate, (come dice la sintassi nella tua domanda " Quindi il     & Quot; [calcval2] "
in

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

diventerebbe semplicemente un alias di colonna nell'output della clausola Select.

o stai chiedendo come definire le formule per una colonna calcolata da basarsi su un'altra?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top