Announcement

Collapse
No announcement yet.

einfaches Select

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

  • einfaches Select

    Hallo Forum,

    ich scheitere gerade an einem eigentlich einfachen Select.

    Ich habe eine Tabelle in der stehen Namen und eine Verteilernummer.
    Nun möchte ich alle Namen haben die die Verteilernummer 100 haben und mindestens 2 Verteilernummern zwischen 1 - 47.

    Kleines Beispiel (bei meinem Select darf nur der Vaultboy ausgegeben werden aber nicht Vaultgirl, da Sie nur einen Eintrag hat der zwischen 1 - 47 liegt:

    Tabelle1

    Name Verteilernummer
    Vaultboy 100
    Vaultboy 22
    Vaultboy 41
    Vaultgirl 100
    Vaultgirl 32


    Ihr hoffe das war verständlich erklärt
    Ich danke Euch schonmal für die Hilfe

  • #2
    So trivial ist das nicht ganz weil Du zählen musst. So könnte man das ca. machen:

    [highlight=sql]
    SELECT v1.Name
    FROM Verteiler v1
    WHERE v1.Verteilernummer = 100
    AND EXISTS
    (
    SELECT v2.Name
    FROM Verteiler v2
    WHERE Verteilernummer BETWEEN 1 AND 47
    AND v2.Name = v1.Name
    GROUP BY v2.Name
    HAVING COUNT(*) > 2
    )
    [/highlight]

    Habs aber nur grad mal so runtergetippt Versuch mal... keine Garantie dass es funktioniert

    Comment


    • #3
      Hallo,

      [highlight=sql]
      with data as
      (select 'Vaultboy' Name,to_number('100') Verteilernummer FROM dual UNION ALL
      select 'Vaultboy',to_number('22') FROM dual UNION ALL
      select 'Vaultboy',to_number('41') FROM dual UNION ALL
      select 'Vaultgirl',to_number('100') FROM dual UNION ALL
      select 'meier',to_number('22') FROM dual UNION ALL
      select 'meier',to_number('41') FROM dual UNION ALL
      select 'meier',to_number('100') FROM dual UNION ALL
      select 'Vaultgirl',to_number('32') FROM dual)
      select * from data
      where name in ( select name from data
      where Verteilernummer between 1 and 47
      group by name
      having (count (name))>1)
      and verteilernummer='100'
      ;

      [/highlight]

      Gruß

      Martin

      aber wenigstens mit Daten ;-)
      Zuletzt editiert von Martin R.; 29.06.2011, 16:50. Reason: zu spät

      Comment


      • #4
        Jetzt kann man wieder die übliche EXISTS gegen IN Diskussion aufwerfen *lach* Aber das soll den OP eigentlich net weiter stören. Ich denke beide funktionieren. Eigentlich ist es ja das Gleiche.

        Comment


        • #5
          Guten Morgen,

          vielen vielen Dank für Eure Antworten, jetzt funktionierts. Ich habe im Vorfeld auch mit Subselect und mit having count probiert zur Lösung zu kommen, aber bin nicht auf das Schlüsselwort EXISTS gekommen. (War jetzt nur ne Bauchentscheidung nicht IN zu benutzen


          Allerdings muss man doch beim count >1 abfragen oder? zumindest deuten meine Testergebnisse darauf hin.

          Warum klappt diese Statement eigentlich nicht?
          Code:
          SELECT     verteilerliste.Nachname, verteilerliste.Vorname, verteilerliste.Verteilernummer
          FROM         verteilerliste
          WHERE     (Verteilernummer BETWEEN 1 AND 47 ) AND (verteilerliste.Verteilernummer = '100')
          GROUP BY verteilerliste.Nachname, verteilerliste.Vorname, verteilerliste.Verteilernummer
          HAVING      (COUNT(verteilerliste.Verteilernummer) > 1)
          ORDER BY verteilerliste.Nachname
          Gruß Vaultboy

          Comment


          • #6
            Hallo,
            Originally posted by Vaultboy View Post
            ...Warum klappt diese Statement eigentlich nicht?
            Weil Verteilernummer nicht gleichzeitig zwischen 1 und 47 liegen und 100 sein kann.
            siehe: (Verteilernummer BETWEEN 1 AND 47 ) AND (verteilerliste.Verteilernummer = '100')

            Anmerkung: Du solltest auf einheitliche Datentypen achten! Einmal vergleichst du Verteilernummer numerisch (BETWEEN 1 AND 47) und einmal als Sting (= '100'). Du solltest dich an den Datentyp der Spalte halten, um dem Server implizite Typkonvertierungen zu ersparen!

            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 COUNT(*) sollte natürlich > 1 sein nicht > 2. Wenn dann höchstens >= 2. Sorry kleiner Fehler meinerseits

              Comment

              Working...
              X