Announcement

Collapse
No announcement yet.

Spaltenwerte zweier Spalten abgleichen SQL Abfrage

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

  • Spaltenwerte zweier Spalten abgleichen SQL Abfrage

    Hallo!

    Meine Ausgangssituation ist folgende:

    Ich habe einen landwirtschaftlichen Betrieb, der in jedem Jahr verschiedene Produktionsverfahren (z.B. Winterweizen (WW), Wintergerste (WG), Zuckerrüben(ZR), Winterraps (WR)) anbaut.
    Die Produktionsverfahren habe ich von 1994 bis 2014 gegeben.

    Das sieht tabellarisch wie folgt aus:

    Produktionsverfahren Jahr
    WW 1994
    WR 1994
    WG 1994
    ZR 1994

    WW 1995
    WR 1995
    Zr 1995
    WG 1995
    .
    .
    .
    WW 2014
    ZR 2014
    WG 2014

    Zunächst möchte ich, dass in die Abfrage nur diejenigen Produktionsverfahren einbezogen werden, die auf jeden Fall bis einschließlich 2014 angebaut wurden (in diesem Beispiel also nicht Winterraps(WR)).
    Das heißt z.B. Produktionsverfahren, die von 1994 bis 2002 angebaut wurden, sollen nicht einbezogen werden.

    Wie kann ich das in einer SQL Abfrage programmieren? (Hinweis: ich verwende MS Access)

    Der Befehl sollte so automatisiert wie möglich sein, da ich ihn auf 2800 Datensätze von insgesamt 21 Betrieben loslassen muss...

    Vielen Dank schon jetzt für eure Tipps!
    Eure Juliee

  • #2
    Deine Infos sind etwas undeutlich.
    Was ist mit 2002? Woher kommt dieses Jahr? Du hast laut Liste Daten von 1994 bis 2014.

    Wenn Du das möglichst "automatisiert", also dynamisch, ohne Verwendung von Konstanten (wie 2002 oder 2014) nur auf Basis der eingetragenen Daten abfragen möchtest, ginge es so:
    Code:
    select Produktionsverfahren
      from (select max(Jahr) - min(Jahr) + 1 ZahlJahre from Produktionsverfahren_Jahr) j,
           (select Produktionsverfahren, count(*) as count_
              from Produktionsverfahren_Jahr
             group by Produktionsverfahren) pv
     where count_ = ZahlJahre
    Ausgabe enthält alle Produktionsverfahren, die durchgängig in allen Jahren genannt sind.
    Das bedeutet, fehlen einzelne Verfahren oder einzelne Jahre, schrumpft die Menge entsprechend.
    Möchtest Du gezielt doch den Zeitraum einschränken, muss das in den beiden Subselects erfolgen (.. where Jahr > xyz )

    In Access sollte das auch so funktionieren, glaub ich. Habs aber nicht ausprobiert.
    Wenn Du mit Deinem Projekt noch am Anfang stehst, solltest Du lieber eine Datenbank wählen, die kostenlos ist und sich mehr an die Standards hält. Dann findest Du auch sicher leichter Hilfe im Internet.
    Gruß, defo

    Comment


    • #3
      Ersteinmal vielen Dank für deine ausführliche Antwort!
      Genau, mein Datenzeitraum geht von 1994 bis einschließlich 2014.


      "Das heißt z.B. Produktionsverfahren, die von 1994 bis 2002 angebaut wurden, sollen nicht einbezogen werden." --> Dies war nur ein Beispiel. Manche Produktionsverfahren wurden eben nur in vereinzelten Jahren angebaut. Wenn diese nicht bis einschließlich 2014 angebaut wurden, sollten die nicht in meine Abfrage einbezogen werden.
      Wenn ich das richtig verstanden habe, würde der Befehl, den du vorschlägst, das auch berücksichtigen.

      Wie kann ich denn Verfahren einbeziehen, die in einem oder mehreren einzelnen Jahren nicht angebaut wurden, aber bis einschließlich 2014? Wie z.B. Winterweizen wurde von 1994 bis 2014 angebaut, aber nicht in den Jahren 1998 und 2001.

      Das mit der Datenbank ist ein guter Tipp. Allerdings wurde mir gerade Access empfohlen, da es einfacher zu lernen ist :-D
      Welche Datenbank würdest du mir denn dann empfehlen?

      Grüße,
      Juliee

      Comment


      • #4
        Originally posted by Juliee View Post
        Wenn ich das richtig verstanden habe, würde der Befehl, den du vorschlägst, das auch berücksichtigen.
        Ja, sollte klappen.

        Originally posted by Juliee View Post
        Wie kann ich denn Verfahren einbeziehen, die in einem oder mehreren einzelnen Jahren nicht angebaut wurden, aber bis einschließlich 2014? Wie z.B. Winterweizen wurde von 1994 bis 2014 angebaut, aber nicht in den Jahren 1998 und 2001.
        Tja, gemäß dieser Bedingung bleibt als Kriterium eigentlich nur übrig, dass es 2014 dabei gewesen sein muss plus irgendein anderes Jahr. Die Abfrage wirst Du wahrscheinlich hinbekommen. Hat aber nichts Allgemeingültiges.
        Probier einfach mal. Wenn es hakt, melde Dich hier.
        Ggf. kann man dieses Kriterium so umformulieren, dass das letzte erfasste Jahr enthalten sein muss (plus irgendein anderes). Dann würde es mit weiteren Daten auch 2015 oder 16 funktionieren..

        Originally posted by Juliee View Post
        Das mit der Datenbank ist ein guter Tipp. Allerdings wurde mir gerade Access empfohlen, da es einfacher zu lernen ist :-D
        Welche Datenbank würdest du mir denn dann empfehlen?
        Access bringt eine Formularfunktion, Reporting und praktische Klickabfragen mit, leider kostet es eben und ist nicht wirklich kompatibel zum Standard und auch nicht tauglich für etwas mehr Benutzer.
        Ungefähr das Gleiche für umsonst und kompatibel bekommst Du mit Libre Office oder Open Office.

        Eine richtige und sehr mächtige DB ist PostgreSQL. Sie ist sehr standardkonform, kostenlos und hat eine Menge Funktionen, die Abfragen wie Du sie machst oder vielleicht noch machen wirst, oft deutlich vereinfachen.
        Es gibt nicht so viel bunte und komfortable Klickertools dafür, man könnte aber Access oder Openoffice als Oberfläche nehmen und PostgreSQL oder andere DB dahinter verwenden. Ich würde ggF. noch Firebird nehmen, mySQL eher nicht.
        Gruß, defo

        Comment

        Working...
        X