Announcement

Collapse
No announcement yet.

Mit Spalten-Alias rechnen?

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

  • Mit Spalten-Alias rechnen?

    Hallo Gemeinde!

    Wie kann man im MS-SQL-Server mit den Ergebnissen von zuvor berechneten Spalten weiterrechnen? (Unter Access funktioniert das ja...).

    Einfaches Beispiel:

    SELECT Artikelpreis * Menge AS Gesamtpreis, Gesamtpreis * 1.19 AS Bruttopreis FROM Artikel

    Beim MS-SQL-Server funktioniert das so leider nicht.
    Danke für Eure Hilfe!

    Gruß, Martin

  • #2
    Das geht im SQL-Server eben nicht, du könntest das höchstens so schreiben:

    select Gesamtpreis, Gesamtpreis * 1.19 AS Bruttopreis from
    (SELECT Artikelpreis * Menge AS Gesamtpreis FROM Artikel) as X


    bye,
    Helmut

    Comment


    • #3
      Danke für die Antwort!
      Gibt es eventuell noch eine andere Alternative, z. B. mittels einer Stored Procedure?

      Comment


      • #4
        Hi, so könnte das gehen:

        Declare @Gesamtpreis float
        SELECT @Gesamtpreis = Artikelpreis * Menge from Artikel
        SELECT @Gesamtpreis * 1,19 as Bruttopreis

        Grüße

        Julia

        Comment


        • #5
          Ich bin gerade in einem Buch zum MS-SQL-Server über folgenden Hinweis gestolpert:

          "Aliasnamen können in ANSI SQL nicht in weiteren Berechnungen wieder verwendet werden. Sie müssen stattdessen den ursprünglichen Berechnungsausdruck in der neuen Berechnung wieder verwenden."

          Tja, dann kann man wohl nichts machen. Schade eigentlich...

          Comment


          • #6
            Hallo,

            Tja, dann kann man wohl nichts machen.
            doch - wenn die Berechnung in einer CTE (Common Table Expressions) vorgenommen wird (eine CTE ist ab dem SQL Server 2005 verfügbar), kann die darunter liegende SELECT-Abfrage mit dem Ergebnis weiterrechnen ;-)

            [highlight=SQL]
            USE tempdb
            GO

            CREATE TABLE dbo.TestTbl
            (
            id INT NOT NULL IDENTITY PRIMARY KEY,
            wert INT NOT NULL DEFAULT 2
            )
            GO
            INSERT INTO dbo.TestTbl DEFAULT VALUES;
            INSERT INTO dbo.TestTbl DEFAULT VALUES;
            INSERT INTO dbo.TestTbl DEFAULT VALUES;
            GO

            WITH cte AS
            (
            SELECT id, wert, id * wert AS ergebnis FROM dbo.TestTbl
            )
            SELECT id, wert, ergebnis, ergebnis * 3 AS ergebnis2 FROM cte
            GO
            [/highlight]
            Ergebnis der SELECT-Abfrage:
            Code:
            id          wert        ergebnis    ergebnis2
            ----------- ----------- ----------- -----------
            1           2           2           6
            2           2           4           12
            3           2           6           18
            
            (3 row(s) affected)

            Comment

            Working...
            X