Ankündigung

Einklappen
Keine Ankündigung bisher.

User helfen User - Programmieren

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

    CASE kann Access natürlich nicht ... zum kotzen.

    Hab es zum Test mal mit Switch([Kilometerstand_1].[Kilometer] Is Null,'Yes',[Kilometerstand_1].[Kilometer] Is Not Null,'NO') versucht, aber auch hier wertet er nur die Einträge aus, die in beiden Jahren einen Eintrag haben.

    BEGIN / END kann Access afaik auch nicht, kenne ich nur von T-SQL.

    Naja, muss ich es erstmal über 0 Einträge lösen und in der Anwendung diese dann automatisch nachpflegen lassen, wenn nötig.

    Kommentar


      SELECT KFZ.Fahrzeug, sum(kilometer)-(SELECT sum(kilometer) FROM Kilometerstand
      WHERE KFZ_ID =KFZ.ID AND Jahr =(year(now())-1) ) FROM KFZ
      LEFT JOIN Kilometerstand ON (KFZ.ID = Kilometerstand.KFZ_ID)
      GROUP BY KFZ.ID, KFZ.Fahrzeug

      Würde sowas funktionieren? Die Summe aller Kilometerstände minus die Summe der Kilometerstände bis zum letzten Jahr

      Ich weiß nicht wie das bei Access ist, aber normal rechnet die Summenfunktion bei keinen Ergebnisse ja mit 0, also sollten alle angezeigt werden

      Kommentar


        Killa, in Oracel gibt es ein NVL (damit belegst Du eine Variable, wenn sie NULL ist): http://stackoverflow.com/questions/16828310/what-is-the-alternative-to-nvl-function-in-ms-access-2007 hilft dir das?

        Kommentar


          Zitat von Jonicei
          SELECT KFZ.Fahrzeug, sum(kilometer)-(SELECT sum(kilometer) FROM Kilometerstand
          WHERE KFZ.ID = Kilometerstand.ID AND Jahr =(year(now())-1) ) FROM KFZ
          LEFT JOIN Kilometerstand ON (KFZ.ID = Kilometerstand.KFZ_ID)
          GROUP BY KFZ.ID, KFZ.Fahrzeug

          Würde sowas funktionieren? Die Summe aller Kilometerstände minus die Summe der Kilometerstände bis zum letzten Jahr
          Sehr geiler Ansatz, danke schon einmal!

          Hab es jetzt mal so ähnlich gemacht und dann werden zumindest die anderen Fahrzeuge angezeigt, aber als Wert NULL (wahrscheinlich weil er nicht subtrahieren kann?). Wenn ich das Statement dann etwas veränder und ein Switch auf NULL einbaue, bekomme ich nur die anderen Werte angezeigt. Jetzt nur noch so hinbiegen, dass sowohl, als auch aufgelistet wird ;D

          So sieht es aus ohne Switch:
          Spoiler: 
          SELECT KFZ.ID, KFZ.Fahrzeug, Sum(Kilometerstand.kilometer)-(SELECT Sum(Kilometerstand.Kilometer)
          FROM Kilometerstand
          WHERE Kilometerstand.KFZ_ID=KFZ.ID AND Kilometerstand.Jahr=2013) AS Ausdr1
          FROM KFZ LEFT JOIN Kilometerstand ON KFZ.ID = Kilometerstand.KFZ_ID
          GROUP BY KFZ.ID, KFZ.Fahrzeug, Kilometerstand.Jahr
          HAVING (((Kilometerstand.Jahr)=2014));

          Und mit wird halt Sum(Kilometerstand.Kilometer) durch SWITCH(Sum(Kilometerstand.Kilometer) IS NULL,0) ersetzt.
          [hr]Edit: Ein Switch mit Standardwert hat es getan

          Kommentar


            Wo ich nochmal drüber nachdenke. Eigentlich macht das sum an der Stelle gar keinen Sinn, da du dich immer nur fest auf 1 Jahr beziehst oder? Also würde der Switch rein auf Kilometerstand.Kilometer auch reichen

            Kommentar


              Eigentlich hast du Recht, wenn ich nur ein Jahr von einem anderen abziehe, brauche ich SUM nicht. Wenn ich es aber weglasse, erkennt SWITCH kein NULL mehr Oo

              Spoiler: 
              SELECT Switch(Kilometerstand.Kilometer Is Null,0,True,Kilometerstand.Kilometer) AS Ausdr1
              FROM Kilometerstand
              WHERE (((Kilometerstand.KFZ_ID)=12) AND ((Kilometerstand.Jahr)=2013));

              Ergibt NULL

              Spoiler: 
              SELECT Switch(SUM(Kilometerstand.Kilometer) Is Null,0,True,SUM(Kilometerstand.Kilometer)) AS Ausdr1
              FROM Kilometerstand
              WHERE (((Kilometerstand.KFZ_ID)=12) AND ((Kilometerstand.Jahr)=2013));

              Ergibt 0

              Edit: Okay, macht ja auch Sinn. Denn dann ist es ja nicht vorhanden und nicht NULL.

              Kommentar


                Zitat von DerKiLLa
                Eigentlich hast du Recht, wenn ich nur ein Jahr von einem anderen abziehe, brauche ich SUM nicht. Wenn ich es aber weglasse, erkennt SWITCH kein NULL mehr Oo

                Spoiler: 
                SELECT Switch(Kilometerstand.Kilometer Is Null,0,True,Kilometerstand.Kilometer) AS Ausdr1
                FROM Kilometerstand
                WHERE (((Kilometerstand.KFZ_ID)=12) AND ((Kilometerstand.Jahr)=2013));

                Ergibt NULL

                Spoiler: 
                SELECT Switch(SUM(Kilometerstand.Kilometer) Is Null,0,True,SUM(Kilometerstand.Kilometer)) AS Ausdr1
                FROM Kilometerstand
                WHERE (((Kilometerstand.KFZ_ID)=12) AND ((Kilometerstand.Jahr)=2013));

                Ergibt 0
                Ich kenne mich mit Access nicht so gut aus (habe versucht schnell was zu googlen) aber würde denn IIF funktionieren?
                Dann brauchst du kein Switch und kannst schreiben:
                SELECT IIF(IsNull(Kilometerstand.Kilometer),0, Kilometerstand.Kilometer) AS Ausdr1 FROM Kilometerstand
                WHERE (((Kilometerstand.KFZ_ID)=12) AND ((Kilometerstand.Jahr)=2013));

                edit:
                Ansonnsten soll wohl NZ die Alternative sein. Wenn ich das richtig verstanden habe also:
                SELECT NZ(Kilometerstand.Kilometer, 0) AS Ausdr1 FROM Kilometerstand
                WHERE (((Kilometerstand.KFZ_ID)=12) AND ((Kilometerstand.Jahr)=2013));

                Kommentar


                  Jop, IIF gibt es und macht das ganze noch etwas kürzer und einfacher. Funktioniert ;)

                  NZ kannte ich noch gar net, funktioniert aber auch: NZ(Sum(Kilometerstand.Kilometer), 0)

                  Spoiler: 
                  SELECT KFZ.ID, KFZ.Fahrzeug, Sum(Kilometerstand.kilometer)-(SELECT NZ(Sum(Kilometerstand.Kilometer), 0)
                  FROM Kilometerstand
                  WHERE Kilometerstand.KFZ_ID=KFZ.ID AND Kilometerstand.Jahr=2013) AS Ausdr1
                  FROM KFZ LEFT JOIN Kilometerstand ON KFZ.ID = Kilometerstand.KFZ_ID
                  GROUP BY KFZ.ID, KFZ.Fahrzeug, Kilometerstand.Jahr
                  HAVING (((Kilometerstand.Jahr)=2014));

                  Kommentar


                    Wenn du summierst, muss aber sichergestellt sein, dass es keine doppelten Datensätze gibt.

                    Kommentar


                      Würde es ja auch ohne machen, aber das will net ;|

                      Funfact: NZ wird von VB.Net net erkannt. IIF macht VB.Net aber ... Selbst wenn ich es in der Abfrage habe und via VB.Net nur die Abfrage ausführe ...

                      Kommentar


                        Bin nicht so wirklich fit in Vererbung usw. Bin am Pythonprogrammieren und frage mich gerade, ob und wie das geht:

                        Ich habe eine Mutterklasse instanziert, die besitzt verschiedene Instanzen anderer Klassen.
                        Kann ich jetzt aus einer dieser unteren Klassen heraus eine Funktion aus der oberen Mutterklasse aufrufen, die nicht static ist, sondern auf Variablen der Mutterklassen-Instanz zugreift?

                        zB die Mutterklasse hat den wert ID = 1 gesetzt, jetzt will ich in der Unterklasse eine Funktion aufrufen, die mit dieser ID = 1 arbeitet.


                        Kommentar


                          "self.ID" afaik

                          Edit: Okay, ich habe Deine Frage glaube ich falsch verstanden. Was Du machst, klingt vor allem falsch. Objektinstanzen können nicht über "Verwandtschaftsbeziehungen" dynamisch Informationen austauschen. Was willst Du denn machen?

                          Kommentar


                            /e hier stand bs, habs falsch gelesen :O

                            Kommentar


                              vlt iwas mit super? kenne mich mit python leider 0 aus -.-
                              in java könnte man das zb mit super.getId() machen (mal vorausgesetzt, deine funktion heißt getId())

                              google sagt, python hat dieses "super" auch

                              Kommentar


                                Hat wohl was mit Function Binding/High order function zu tun, brauchte n Stichwort um google zu durchforsten ;)

                                edit: geht jetzt auch eher darum, eine Funktion der parten-class für die child classes nutzbar zu machen. Hat sich jetzt eher in die Richtung entwickelt.

                                Kommentar

                                Lädt...
                                X