Declare: Ergebnis einer Berechnung ?

MysterioJN

SQL-Guru
Beiträge
158
Hoi zusammen,
hallo Ukulele ;)

Ich habe einen Select, der neben einigen Infos aus verschiedenen Tabellen auch folgende Spalten eines Artikels aufwendig und zeitintensiv berechnet:

1. Absatz / Tage im Vertrieb = durchschnittlicher Tagesabfluss

2. Bestand / durchschnittlicher Tagesabfluss = Tage verfügbar

3. =getdate() + Tage verfügbar = Verfügbar bis Datum


Besteht die Möglichkeit, einzelne Ergebnisse als Alias oder so anzusprechen?
Die 2 kann ich nicht ohne das Ergebnis von 1 berechnen, die 3 nicht ohne das Ergebnis von 2.
Bestand + Alias 1 = Tage verfügbar
getdate + Alias 2 = Verfügbar bis Datum


Die Berechnungen wiederholen sich nämlich derzeit was zum Teil mehrere Minuten dauert.

Beispielauszug:
Code:
(
        SELECT SUM(aid_tab.stueck) FROM aid_tab WHERE artikel.anr = aid_tab.BestNr) AS ABSATZ,

    (
        SELECT tblBestand.verTageGesamt FROM tblBestand WHERE artikel.anr = tblBestand.BstNr) AS BESTAND,
 
    CONVERT(DECIMAL(10,2),CAST((SELECT SUM(aid_tab.stueck) FROM aid_tab WHERE artikel.anr = aid_tab.BestNr) AS FLOAT) / (SELECT tblBestand.verTageGesamt FROM tblBestand WHERE artikel.anr = tblBestand.BstNr)) AS dTAGESABFLUSS,

    CASE
        WHEN CONVERT(DECIMAL(10,2),CAST((SELECT SUM(aid_tab.stueck) FROM aid_tab WHERE artikel.anr = aid_tab.BestNr) AS FLOAT) / (SELECT tblBestand.verTageGesamt FROM tblBestand WHERE artikel.anr = tblBestand.BstNr)) = 0
        THEN '0'
        ELSE FLOOR(artikel.bestand / CONVERT(DECIMAL(10,2),CAST((SELECT SUM(aid_tab.stueck) FROM aid_tab WHERE artikel.anr = aid_tab.BestNr) AS FLOAT) / (SELECT tblBestand.verTageGesamt FROM tblBestand WHERE artikel.anr = tblBestand.BstNr)))
        END AS TAGEVERFUEGBAR,
 
    FORMAT(DateAdd (DAY, CASE
            WHEN CONVERT(DECIMAL(10,2),CAST((SELECT SUM(aid_tab.stueck) FROM aid_tab WHERE artikel.anr = aid_tab.BestNr) AS FLOAT) / (SELECT tblBestand.verTageGesamt FROM tblBestand WHERE artikel.anr = tblBestand.BstNr)) = 0
            THEN '0'
            ELSE FLOOR(artikel.bestand / CONVERT(DECIMAL(10,2),CAST((SELECT SUM(aid_tab.stueck) FROM aid_tab WHERE artikel.anr = aid_tab.BestNr) AS FLOAT) / (SELECT tblBestand.verTageGesamt FROM tblBestand WHERE artikel.anr = tblBestand.BstNr)))
            END
        ,getdate()), 'yyyy-MM') AS VERFUEGBARbisDATUM

FROM
....
 
Zuletzt bearbeitet:
Werbung:
Werbung:
Ich würde den Select in mehrere Ebenen aufteilen, ginge aber auch mit WITH.

Beispiel:
Code:
SELECT t.berechnete_spalte AS weitere_berechnung
FROM (

SELECT berechnung AS berechnete_spalte
FROM tabelle

) t
 
Zurück
Oben