Announcement

Collapse
No announcement yet.

SQL - Berechnete Spalte

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL - Berechnete Spalte

    Hallo,

    ich habe folgende Frage zur Erstellung einer Spalte in SQL, welche sich selbst berechnen soll.
    Aus der MS - Doku geht eigentlich klar hervor wie man das anstellen kann, wenn sich die Quellinformation in der selben Tabelle befindet. Genau das ist bei mir der Punkt, meine Quellinformationen sind in einer anderen Tabelle und müssen sich aus mehreren Einträgen (Zeilen) errechnen.

    Gibt es nun einen Weg, folgende Daten abzufragen, zusammenzurechnen und in der Zeile zu speichern? (derzeit formuliere ich meinen pseudocode - daher habe ich keine Code Beispiele.)
    Folgend meine Tabellen mit dem IST - Zustand und dem Wunschzustand:

    Tabellen:
    Tabelle 1 - "Account"
    ID | NAME | START_VALUE | VALUE | FK_USR
    1 ; TEST ; 10.0 ; 0.0 ; 1 => VALUE muss programmtechnisch errechnet und gespeichert werden
    2 ; OK ; 15.15 ; 0.0 ; 3

    Tabelle 2 - "Buchungszeile"
    ID | DATE | VALUE | FK_ACC
    1 ; 01.01.2023 ; -120.0 | 1
    1 ; 02.01.2023 ; -1.0 | 1
    1 ; 03.01.2023 ; +16.0 | 1
    1 ; 04.01.2023 ; -33.3 | 1
    1 ; 05.01.2023 ; +250.59 | 1


    Wunsch:
    Tabelle 1 - "Account"
    ID | NAME | START_VALUE | VALUE | FK_USR
    1 ; TEST ; 10.0 ; 122.29 ; 1 => VALUE = (Account.START_VALUE + (SELECT SUM(VALUE) FROM Buchungszeile WHERE FK_ACC = Account.ID)) PERSISTED ≙ 122.29
    2 ; OK ; 15.15 ; 15.15 ; 3 => VALUE = (Account.START_VALUE + (SELECT SUM(VALUE) FROM Buchungszeile WHERE FK_ACC = Account.ID)) PERSISTED ≙ 15.15

    Falls für berechneten Spalten noch Sonderregel gelten oder ich auf bestimmte Dinge aufpassen muss, z.B.: beim Abfragen dann bitte ebenfalls um kurze Info.

    Vielen Dank für jegliche Hilfe.
    LG Sh0Xy

  • #2
    Ein Subselect auf eine andere Tabelle ist möglich

    select a,b,c, (select sum(v) from tabelleB where ....) as VALUE from tabelleA
    Christian

    Comment


    • #3
      Hallo,

      danke für den Tipp, wenn ich aber per Management Studio versuche ein Select in die berechnete Spalte einzufügen, bekomme ich folgende Meldung:

      "Tabelle "ACCOUNT"
      - Die Tabelle kann nicht geändert werden.
      Unterabfragen sind in diesem Kontext nicht zulässig. Es sind nur Skalarausdrücke zulässig."

      Eintrag in der berechneten Spalte:
      ([ACCOUNT_START_VALUE]+(SELECT SUM(acc_ch.ACC_VALUE) FROM [dbo].[ACCOUNT_CHANGE] AS acc_ch WHERE acc_ch.ACC_AC_FID = [ACCOUNT_ID]))

      Das würde ich so verstehen, das ich keine Bezug auf eine andere Tabelle nehmen kann. Gibt es zur Programmtechnischen Berechnung eine alternative?

      Sh0Xy

      Comment


      • #4
        Das ist kein SQL-Problem
        Ich arbeite nicht mit MS, aber eine kurze suche zur Fehlermeldung ergab

        Öffnen Sie SQL Server Management Studio. Klicken Sie im Menü Extras auf Optionen. Klicken Sie im Navigationsbereich des Fensters Optionen auf Designer.
        Aktivieren oder deaktivieren Sie das Kontrollkästchen Speichern von Änderungen verhindern, die die Neuerstellung der Tabelle erfordern, und klicken Sie dann auf OK

        https://www.google.com/search?client...A4ndert+werden
        Christian

        Comment


        • #5
          Zitat aus der Dokumentation

          Der Ausdruck kann der Name einer nicht berechneten Spalte, eine Konstante, eine Funktion, eine Variablen oder eine beliebige durch einen oder mehrere Operatoren verbundene Kombination der genannten Möglichkeiten sein. Der Ausdruck kann weder eine Suchbedingung oder Unterabfrage sein noch einen Aliasdatentyp einschließen.
          Heißt da geht keine Abfrage. Lösung steckt vermutlich in dem Wort "Funktion". Du könntest deine Abfrage in eine benutzerdefinierte Funktion packen und diese in deiner berechneten Spalte aufrufen. Beispiel hier

          Comment


          • #6
            MSSQL kann kein Standard-SQL wie aus #2?
            Christian

            Comment


            • #7
              Doch kann der natürlich aber der OP schrieb auch
              Gibt es nun einen Weg, folgende Daten abzufragen, zusammenzurechnen und in der Zeile zu speichern?
              Das "speichern" und das benennen des Features habe ich so interpretiert das er nicht einfach eine Abfrage mit SubSelect in der Select Liste will (oder einen View) sondern diese Spalte tatsächlich in einer echten Tabelle speichern will. Das Feature heißt in Sql Server leider berechnete Spalte was nur so halb richtig ist und möglicherweise vom OP nur so dahergesagt wurde obwohl er was anderes meinte. Siehe z.b hier. Der entscheidende Faktor beim dem Feature ist das "persistet" warum auch Abfragen eher nicht unterstützt werden weil der Ausdruck beim Insert/Update berechnet wird und nicht erst beim eigentlichen Abfragen.

              Comment


              • #8
                "Gespeichert" hatte ich als "es wird in der Tabelle bei der Ausgabe angezeigt" interpretiert.
                Ansonsten würde es bei mir keinen Sinn ergeben, einen Wert bei einer select-Abfrage zu speichern. Das würde nur in einem Update Sinn ergeben
                Christian

                Comment

                Working...
                X