Announcement

Collapse
No announcement yet.

Problem bei "union all"

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

  • Problem bei "union all"

    Hallo erstaml. Bin hier neu und auch noch etwas grün hinter den Ohren was SQL betrifft. Mein problem ist ich muss 2 Abfragen miteinander verknüpfen, hab gelesen dass es mit union all am einfachsten ist. Aber irgendwas funktioniert leider nicht, ich bekomme nur die Antwort dass ein Spaltenname ungültig ist. obwohl es ihn eindeutig gibt. kann mir wer helfen bzw. einen Tipp geben wie ich das auf ne andere Art verknüpfen kann?
    im Anhang sind meine Abfragen!!
    Danke
    Attached Files

  • #2
    Hi, Du hast in der unteren Abfrage 2x das Feld Lagerbestand. Liegt möglicherweise daran :-)

    Comment


    • #3
      Äh, danke, hoppla, nein das hat sich irgendwie dahin verirrt, is im originalcode natürlich nur einmal, und das problem ist dass er in der erten Abfrage genau das ausspuckt:
      Meldung 207, Ebene 16, Status 1, Zeile 5
      Ungültiger Spaltenname 'Menge'.

      Und diese Spalte gibt es: wenn ich '' as Reservierung eintippe, kommt zwar ein Ergebnis, jedoch zu jedem Artikel 2 zeilen, und in jeder Zeile ist entweder nur ein Bestand oder eine Reservierung und nie beides zusammen

      Comment


      • #4
        danke hat sich schon erledigt

        Comment


        • #5
          hallo, ich bins wieder, union liegt mir anscheinend wirklich nicht!! (gleich wie SQL ingesamt).
          mein code:

          select Belegnummer, Lager, Produktionsartikel, Artikelgruppe, Menge, isnull(round(sum("preis ebene 3"),0),0)
          from SL_vZiellagerwert
          group by belegnummer, Lager, Produktionsartikel, Menge, Artikelgruppe

          union all

          select belegnummer,lager, produktionsartikel, Artikelgruppe, menge, isnull(round(sum("preis ebene 2"),0),0)
          from SL_vZiellagerwert
          where "setartikel ebene 3" is null
          group by belegnummer, lager, produktionsartikel, menge, Artikelgruppe

          union all

          select belegnummer,lager, produktionsartikel, Artikelgruppe, menge, isnull(round(sum("preis ebene 1"),0),0)
          from SL_vZiellagerwert
          where "setartikel ebene 2" is null
          group by belegnummer, lager, produktionsartikel, menge, Artikelgruppe

          order by belegnummer

          wie man sich vorstellen kann sieht das ergebnis jetzt so aus, dass ich durch die unions zu jeder belegnummer 3 zeilen mit verschiedenen werten (preisen) in der letzten spalte habe. es sollte jedoch nur EINE zeile pro belegnummer sein und in der letzten spalte sollte die summe der 3 preise stehen. nur leider schaffe ich es nicht über alle 3 tabellen eine summe zu bilden, jetzt wollt ich mal fragen wie das geht bzw. ob das überhaupt geht und ob es eine bessere lösung gibt.

          Comment


          • #6
            Bist du sicher, dass die Menge ein Element der Gruppe ist und nicht auch summiert werden müsste wie der Preis?
            Und das IsNull beim Preis ist auch falsch, denke ich. Da müsste ... round(sum(IsNull("preis ebene 3")),0) ... stehen.
            Und die Gesamtsumme könnte man aus dem Ganzen bilden, wenn man das Ergebnis deiner bisherigen Abfrage als Tabelle sieht (nennt sich derived table) und darauf nochmal ein select macht, etwa so:
            Code:
            select Belegnummer, Lager, Produktionsartikel, Artikelgruppe, Menge, sum(Preis2) from
            (
                select Belegnummer, Lager, Produktionsartikel, Artikelgruppe, Menge,
                isnull(round(sum("preis ebene 3"),0),0) as Preis2 from SL_vZiellagerwert
                group by belegnummer, Lager, Produktionsartikel, Menge, Artikelgruppe
                union all
                ...
            ) as X group by belegnummer, Lager, Produktionsartikel, Menge, Artikelgruppe
            bye,
            Helmut

            Comment


            • #7
              herzlichen dank helmut, habe doch in letzter sekunde einen alten beitrag gefunden der mein problem bereits gelöst hat, der richtie Code lautet:

              with Summe(Belegnummer, Lager, Produktionsartikel, Artikelgruppe, Menge, Ziellagerwert) as(
              select Belegnummer, Lager, Produktionsartikel, Artikelgruppe, Menge, isnull(round(sum("preis ebene 3"),0),0) as Ziellagerwert
              from SL_vZiellagerwert
              group by belegnummer, Lager, Produktionsartikel, Menge, Artikelgruppe


              union all

              select belegnummer,lager, produktionsartikel, Artikelgruppe, menge, isnull(round(sum("preis ebene 2"),0),0)
              from SL_vZiellagerwert
              where "setartikel ebene 3" is null
              group by belegnummer, lager, produktionsartikel, menge, Artikelgruppe

              union all

              select belegnummer,lager, produktionsartikel, Artikelgruppe, menge, isnull(round(sum("preis ebene 1"),0),0)
              from SL_vZiellagerwert
              where "setartikel ebene 2" is null
              group by belegnummer, lager, produktionsartikel, menge, Artikelgruppe
              )

              select Belegnummer, Lager, Produktionsartikel, Artikelgruppe, Menge, sum(Ziellagerwert) as Ziellagerwert
              from Summe
              group by Belegnummer, Lager, Produktionsartikel, Artikelgruppe, Menge

              die menge sollte nicht summiert werden da sich diese auf den produktionsartikel bezieht und nicht auf die 3 preise; diese beziehen sich auf die teilartikel

              danke nochmal und schönen tag

              Comment

              Working...
              X