Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL Abfrage, Aggregationen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    SQL Abfrage, Aggregationen

    Hi,

    hab was kniffliges, komm aber auf keinen grünen zweig.

    hab ne kundentabelle

    einträge:

    ID - Name - Kundentyp1(Wahr oder Falsch), Kundentyp2(Wahr oder Falsch), Kundentyp3(Wahr oder Falsch)
    1 - A GMBH - Wahr - Falsch - Falsch
    2 - B AG - Wahr - Falsch - Falsch
    3 - C AG - Falsch - Wahr - Falsch
    4 - D EK - Falsch - Falsch - Wahr

    Dazu eine Budget tabelle

    ID - Periode - Ertragsart1 - Ertragsart2 - Ertragsart3
    1 - 201412 - 500 - 1000 - 10
    1 - 201212 - 50 - 300 - 10
    2 - 201412 - 400 - 50 - 10
    2 - 201212 - 300 - 500 - 10
    3 - 201412 - 60 - 70 - 10
    3 - 201212 - 10 - 50 - 10
    4 - 201412 - 60 - 800 - 10
    4 - 201212 - 30 - 50 - 10


    Was ich nun angezeigt haben will:

    Kundentyp, Ertragsart1+Ertragsart3, Ertragsart2
    Kundentyp1, 920, 1050
    Kundentyp2, 70, 70
    Kundentyp3, 70, 800

    (Immer die Periode 201412)


    war das verständlich? :D

    also nach kundentypen gebündelt, nach ausgewählter periode, summieren)

    thx!

    #2
    ist ID aus der 1. Tabelle = ID aus der 2. Tabelle? Finde den Aufbau der 1. Tabelle katastrophal :

    Kommentar


      #3
      Ich finde das ganze Datenmodell katastophal =D

      Aber ja, ID aus 1. Tabelle = ID aus 2. Tabelle, ansonsten ergibt es 0 Sinn.

      Kommentar


        #4
        Ich nehme mal an das ID aus 1. Tabelle = ID in der 2. Tabelle ist. Den SQL habe ich jetzt einfach mal grob ausm kopf heraus getippt.

        Kundentabelle = t0; Budget Tabelle = t1
        Select (SUM(t1.Ertragsart1) + SUM(t1.Ertragsart2)) AS 'Ertrag 1+3', SUM(t1.Ertragsart2) AS 'Ertrag2' FROM Kundentabelle t0 inner join Budgettabelle t1 on t0.ID = t1.ID WHERE Periode ='201412' GROUP BY t0.ID

        hoffe das hilft dir!

        Kommentar


          #5
          Zitat von Screm01
          Ich nehme mal an das ID aus 1. Tabelle = ID in der 2. Tabelle ist. Den SQL habe ich jetzt einfach mal grob ausm kopf heraus getippt.

          Kundentabelle = t0; Budget Tabelle = t1
          Select (SUM(t1.Ertragsart1) + SUM(t1.Ertragsart2)) AS 'Ertrag 1+3', SUM(t1.Ertragsart2) AS 'Ertrag2' FROM Kundentabelle t0 inner join Budgettabelle t1 on t0.ID = t1.ID WHERE Periode ='201412' GROUP BY t0.ID

          hoffe das hilft dir!
          Danke schonmal - aber da macht er mir doch nur die Summen oder? und keine Gruppierung nach den Wahr/Falsch Kriterien (Kundentyp) (((Kunde 1 + 2 , Kunde 3, Kunde 4)))

          Kommentar


            #6
            Der Aufbau kann nun wirklich net dein ernst sein Oo?

            SELECT Tabelle1.Name, Tabelle2.Periode, [Tabelle2]![Ertragsart1]+[Tabelle2]![Ertragsart3] AS Ertragsart13, Tabelle2.Ertragsart2
            FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.ID = Tabelle2.ID
            GROUP BY Tabelle1.Kundentyp1, Tabelle1.Kundentyp2, Tabelle1.Kundentyp3, Tabelle1.Name, Tabelle2.Periode, [Tabelle2]![Ertragsart1]+[Tabelle2]![Ertragsart3], Tabelle2.Ertragsart2
            HAVING (((Tabelle1.Kundentyp1)=True) AND ((Tabelle2.Periode)="201412")) OR (((Tabelle1.Kundentyp2)=True) AND ((Tabelle2.Periode)="201412")) OR (((Tabelle1.Kundentyp3)=True) AND ((Tabelle2.Periode)="201412"));

            Kommentar


              #7
              ich habs net gebastelt :D nur zwangsweise übernommen, bin kein informatiKKer

              danke killa, ich probier das mal aus

              Kommentar


                #8
                Ergebnis sieht so aus:



                Edit: Ach du willst es ja nach Kundentyp haben ... Moment

                SELECT Tabelle1.Kundentyp1, Tabelle1.Kundentyp2, Tabelle1.Kundentyp3, Tabelle2.Periode, Sum([Tabelle2]![Ertragsart1]+[Tabelle2]![Ertragsart3]) AS Ertragsart13, Sum(Tabelle2.Ertragsart2) AS SummevonErtragsart2
                FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.ID = Tabelle2.ID
                GROUP BY Tabelle1.Kundentyp1, Tabelle1.Kundentyp2, Tabelle1.Kundentyp3, Tabelle2.Periode
                HAVING (((Tabelle1.Kundentyp1)=True) AND ((Tabelle2.Periode)="201412")) OR (((Tabelle1.Kundentyp2)=True) AND ((Tabelle2.Periode)="201412")) OR (((Tabelle1.Kundentyp3)=True) AND ((Tabelle2.Periode)="201412"));


                Edit: Etwas schöner:

                SELECT IIf([Tabelle1]![Kundentyp1]=True,"Kundentyp1",IIf([Tabelle1]![Kundentyp2]=True,"Kundentyp2",IIf([Tabelle1]![Kundentyp3]=True,"Kundentyp3","OhneKundentyp"))) AS Kundentyp, Tabelle2.Periode, Sum([Tabelle2]![Ertragsart1]+[Tabelle2]![Ertragsart3]) AS SumEA13, Sum(Tabelle2.Ertragsart2) AS SumEA2
                FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.ID = Tabelle2.ID
                GROUP BY IIf([Tabelle1]![Kundentyp1]=True,"Kundentyp1",IIf([Tabelle1]![Kundentyp2]=True,"Kundentyp2",IIf([Tabelle1]![Kundentyp3]=True,"Kundentyp3","OhneKundentyp"))), Tabelle2.Periode
                HAVING Tabelle2.Periode="201412" OR Tabelle2.Periode="201412" OR Tabelle2.Periode="201412";

                Kommentar


                  #9
                  Für den Anfang wäre das übrigens ein ordentliches Konzept:



                  Wobei man Erträge sogar noch unterteilen könnte. So mit neuer Tabelle mit den Ertragsarten (Bezeichnung) und dann in Erträge nur Kunde, Periode, ErtragsartID und Ertrag

                  Kommentar


                    #10
                    Habs nun auch so gemacht und die Kundentypbezeichnung ausgelagert. Klappt!

                    Dickes dankeschön 10/10, würde donaten

                    Kommentar

                    Lädt...
                    X