Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Declare: Ergebnis einer Berechnung ?

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von MysterioJN, 28 Juni 2016.

  1. MysterioJN

    MysterioJN Datenbank-Guru

    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: 28 Juni 2016
  2. akretschmer

    akretschmer Datenbank-Guru

    ich hab mir das jetzt nicht im Detail angeschaut, aber evtl. sind WITH-Queries etwas für Dich. Alternativ Subqueries.
     
  3. ukulele

    ukulele Datenbank-Guru

    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
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden