Announcement

Collapse
No announcement yet.

Simples Problem!!

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

  • Simples Problem!!

    Hallo,
    ich lese hier seit über 1 Stunde, kann aber keine Lösung finden.

    Beispiel ist stark vereinfacht:

    Tab1 besteht aus
    [Spalte1]
    [spalte2]

    Select
    [Spalte1] + [Spalte2] as ErrechnetGesamtNetto,
    ErrechnetGesamtNetto * 1,19 as ErrechnetGesamtBrutto
    from Tab1

    Fehlermeldung: Ungültiger Spaltenname 'ErrechnetGesamtNetto'

    => stimmt, es gibt keine Spalte ErrechnetGesamtNetto in Tab1,
    es gibt aber eine berechnete Spalte ErrechnetGesamtNetto.
    Wieso wird dann nicht die errechnete Spalte ErrechnetGesamtNetto
    genommen wie es bei Access kenne?

    Ich weiss das ich dies mit Unterabfragen lösen kann,
    aber da durch wird es unnötig kompliziert den SQL Code zu lesen.

  • #2
    Der SQL-Server kann das nicht, nicht mal in der WHERE-Klausel könnte man diesen errechneten Wert verwenden. Ist leider so.

    bye,
    Helmut

    Comment


    • #3
      MS Access kann es, sonst AFAIK keine RDBMS.

      Geht über eine Derived Table oder ab SQL Server 2005 als CTE (Common Table Expression) ; macht es nicht wirklich "komplizierter".
      [highlight=SQL]
      SELECT ErrechnetGesamtNetto,
      ,ErrechnetGesamtNetto * 1,19 as ErrechnetGesamtBrutto
      FROM
      (Select [Spalte1] + [Spalte2] as ErrechnetGesamtNetto
      from Tab1) AS Sub
      [/highlight]

      [highlight=SQL];WITH cte AS
      (Select [Spalte1] + [Spalte2] as ErrechnetGesamtNetto
      from Tab1)
      SELECT ErrechnetGesamtNetto,
      ,ErrechnetGesamtNetto * 1,19 as ErrechnetGesamtBrutto
      FROM cte;
      [/highlight]
      Olaf Helper

      <Blog> <Xing>
      * cogito ergo sum * errare humanum est * quote erat demonstrandum *
      Wenn ich denke, ist das ein Fehler und das beweise ich täglich

      Comment


      • #4
        vielleicht genügt dem Fragesteller ja auch das:

        [highlight=sql]
        SELECT
        [Spalte1] + [Spalte2] AS ErrechnetGesamtNetto,
        ([Spalte1] + [Spalte2]) * 1,19 AS ErrechnetGesamtBrutto
        FROM Tab1
        [/highlight]
        Ich habs gleich!
        ... sagte der Programmierer.

        Comment


        • #5
          vielleicht genügt dem Fragesteller ja auch das:
          Vielleicht ja; stellt sich auch die Frage, was der Fragesteller unter "kompliziert" versteht
          Olaf Helper

          <Blog> <Xing>
          * cogito ergo sum * errare humanum est * quote erat demonstrandum *
          Wenn ich denke, ist das ein Fehler und das beweise ich täglich

          Comment


          • #6
            Wenn Tab1 50 Spalten hätte und ich .....

            SELECT ErrechnetGesamtNetto, ErrechnetGesamtBrutto,
            ErrechnetGesamtBrutto *0,02 as SkontoGesamt
            (SELECT *, ErrechnetGesamtNetto,
            ,ErrechnetGesamtNetto * 1,19 AS ErrechnetGesamtBrutto
            FROM
            (SELECT * , [Spalte1] + [Spalte2] AS ErrechnetGesamtNetto
            FROM Tab1) AS Sub)


            Mehrfache Tiefe Derived Table Verschaltelungen
            und * bei Tabs mit 50 Spalten einbaue (davon aber letzlich nur wenige verwende)

            ist der MS SQL so schlau um Performance-mäßig so auszuführen das
            die Abfrage nicht unnötig 4 langsamer ist als nötig?

            Comment


            • #7
              "*" kommt gar nicht in Frage weil zwei Tabellen verknüpft werden
              welche die selben Spalten Namen haben.

              am einfachsten wäre es wenn MS SQL

              Select
              [Spalte1] + [Spalte2] as ErrechnetGesamtNetto,
              ErrechnetGesamtNetto * 1,19 as ErrechnetGesamtBrutto
              from Tab1
              erlauben würde

              Comment


              • #8
                ist aber nicht erlaubt.

                Hast du dir meinen Vorschlag einmal angeschaut? Man muss zwar Einiges mehr tippen, aber ich halte das noch für recht übersichtlich.
                Ich habs gleich!
                ... sagte der Programmierer.

                Comment

                Working...
                X