Announcement

Collapse
No announcement yet.

Verschachtelte Abfrage die 2.te

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

  • Verschachtelte Abfrage die 2.te

    Hallo an Alle,

    hätte erneut ein Anliegen:

    Habe 2 Tabellen, die erste enthält Personenbezogene Daten u.a. das Alter, Geschlecht und eine ID welche die Person zusätzlich kategorisiert. Die zweite Tabelle enthält zuätzliche Daten bezogen auf ID, Alter und ab einem gewissen Alter auch auf das Geschlecht.

    Zur Veranschaulichung:

    Tabelle 1:

    ID | Name | Alter | Geschlecht
    _______________________
    1 | MAX | 5 | M
    2 | PAUL | 15 | M
    1 | HEIDI | 10 | W
    2 | Peter | 25 | M
    1 | LISA | 28 | W


    Tabelle 2:

    ID | (bis)Alter | Geschlecht | Normwert
    ___________________________
    1 | 2 | | 10
    1 | 4 | | 12
    1 | 8 | | 20
    1 | 20 | | 40
    1 | 999 | M | 80
    1 | 999 | W | 70
    2 | 2 | | 4
    2 | 6 | | 9
    2 | 11 | | 15
    2 | 999 | M | 47
    2 | 999 | W | 41


    Nun möchte ich für die Personen aus Tabelle 1 den ID, Alters und Geschlechtsabhängigen Normwert auslesen.

    Wobei zu beachten ist, dass der Normwert bis zu einem gewissen Alter geschlechtsunabhängig ist!!

    Hat jemend von Euch/Ihnen eine Idee??

    Vielen Dank für die Hilfe!!

    A.

  • #2
    Hallo,

    mit reinem SQL wird das ziemlich komplex. Da ist zum Einen der JOIN über drei Werte (wobei Nullwerte zu berücksichtigen sind) und zusätzlich muss auch noch nach höchstem (bis)Alter gefiltert werden.

    Ich würde mir hier eine kleine Funktion schreiben, die zu einer Kombination aus ID, Alter und Geschlecht den Normwert ermittelt und diese Funktion dann in einem einfachen Select über Tabelle1 verwenden.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo Falk,

      könntes Du mir bei dieser Funktion etwas behilflich sein? Bin mit SQL nur an der Basis verheiratet ;-)

      Comment


      • #4
        Naja, mit der Syntax vom MS-SQL-Server bin ich nicht so fit, aber beim drübernachdenken sieht dann das SQL eigentlich garnicht so kompliziert aus.

        Müßte eigentlich so gehen (ungetestet):
        [highlight=sql]
        select t1.ID, t1.Name, t1.Alter, t1.Geschlecht, (
        select top 1 t2.Normwert
        from Tabelle_2 t2
        where t2.ID = t1.ID
        and t2.(bis)Alter = t1.Alter
        and ISNULL(t2.Geschlecht, t1.Geschlecht) = t1.Geschlecht
        order by t2.(bis)Alter desc) Normwert
        from Tabelle_1 t1
        [/highlight]

        Gruß Falk

        P.S.: Eine Spalte mit Alter zu benennen ist generell keine gute Idee, da ALTER ein SQL-Schlüsselwort ist.
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          1) Alter heist meine Spalte natürlich nicht - diente nur der Veranschaulichung
          2) Bekomme leider immer NULL als Ergebnis!!

          nur mal so ein Gedanke von mir: kann es sein dass der Bereich 'and ISNULL....." die Probleme macht?? Wenn ich die Zeile raus nehme, dann bekomme ich zumindest bei einigen Zeilen einen Wert - aber dort auch nur, wenn ich in der Zeile drüber wie folgt ab ändere

          AND t2.(bis)ALTER >= t1.ALTER

          Denn zu beachten ist, dass das Alter in der Normtabelle nicht genau dem in der Tabelle 1 entspricht, sondern eben nur "bis" d.h. um bei obigen Bsp. zu bleiben ein Männlicher 3 jähriger mit ID 1 hätte einen Normwert von 12.

          Comment


          • #6
            Originally posted by sqlad View Post
            ...wenn ich in der Zeile drüber wie folgt ab ändere

            AND t2.(bis)ALTER >= t1.ALTER
            Ja natürlich, sorry mein Fehler

            Originally posted by sqlad View Post
            ...nur mal so ein Gedanke von mir: kann es sein dass der Bereich 'and ISNULL....." die Probleme macht?? Wenn ich die Zeile raus nehme, dann bekomme ich zumindest bei einigen Zeilen einen Wert
            Nur mal so ein Gedanke von mir: kann es sein dass die Werte von Geschlecht in der Tabelle 2 nicht NULL sind wenn sie leer sind, sondern z.B. ein leerer String ''?

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Ja sie sind NICHT NULL sondern es ist ein leerer String ''

              Ich hab da auch noch was vergessen: is wird nicht nur ein Wert aus Tabelle 2 abgefragt sondern mehrere. Dachte das wäre primär egal, doch wie ich bemerkt habe funktioniert das so leider nicht. d.h. ich benötige aus Tabelle 2: NORMWERT_OBEN, NORMWERT_UNTEN, NORMWERT_STD_ABWEICH

              Comment


              • #8
                Originally posted by sqlad View Post
                Ja sie sind NICHT NULL sondern es ist ein leerer String ''
                Dann darfst du eben nicht auf NULL prüfen, sondern auf einen leeren String.
                [highlight=sql]
                ...
                AND t2.Geschlecht in (t1.Geschlecht, '')
                [/highlight]
                Originally posted by sqlad View Post
                Ich hab da auch noch was vergessen: is wird nicht nur ein Wert aus Tabelle 2 abgefragt sondern mehrere. Dachte das wäre primär egal, doch wie ich bemerkt habe funktioniert das so leider nicht. d.h. ich benötige aus Tabelle 2: NORMWERT_OBEN, NORMWERT_UNTEN, NORMWERT_STD_ABWEICH
                Kannst du dir eigentlich vorstellen, wie frustrierend es für den Helfer ist, wenn die Leute denen man helfen will, mit den Infos so bröckchenweise rausrücken ... und plötzlich alles Makulatur ist und man von Vorne anfangen kann - soweit man noch Lust hat...

                Gruß Falk
                Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                Comment


                • #9
                  Originally posted by Falk Prüfer View Post

                  Kannst du dir eigentlich vorstellen, wie frustrierend es für den Helfer ist, wenn die Leute denen man helfen will, mit den Infos so bröckchenweise rausrücken ... und plötzlich alles Makulatur ist und man von Vorne anfangen kann - soweit man noch Lust hat...

                  Gruß Falk
                  Sorry das tut mir echt leid!!! Wie schon gesagt - ich bin mit SQl nur an der Basis bekannt und somit sind auch manche Auswirkungen nur schwer bis gar nicht abzusehen..... Kannst Dir sicher vorstellen, dass man das als Bittsteller auch nicht mit Absicht macht!

                  Comment


                  • #10
                    Habs geschafft!

                    Hab mir eine eigene Funktion geschrieben!

                    vielen Dank für Deine Hilfe und nix für ungut! ;-)

                    Comment

                    Working...
                    X