Announcement

Collapse
No announcement yet.

eine spalte aber unterschiedliche abfragewerte

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

  • #16
    Originally posted by carsten_87 View Post
    ..
    Ziel soll später sein, das man mehrere Verteiler auswählen kann, und nur Kunden die in verteiler 1 UND 2 UND 3 etc.. stehen werden angeschrieben o.ä.
    Kann es sein, dass Du mittlerweile die ursprüngliche Anforderung verdrängt hast?
    Und wenn man beliebig viele Verteiler wählen kann/darf, kommst Du mit einem konstanten "Having " vermutlich auch nicht weiter. Aber das machst Du ja wohl dynamisch.
    Egal, das IN () oder OR bereitet jedenfalls Probleme, die sich vermeiden ließen, vorausgesetzt Deine Selektion ist doch so wie ursprünglich formuliert UND verknüpft, also die Schnittmenge der Verteiler.
    Wenn Du eine künstliche Menge der selektierten Verteiler per Union aufbaust und die mit rein joinst, kannst Du das ganze group by.. having .. doch wohl weglassen oder?
    Gruß, defo

    Comment


    • #17
      Originally posted by defo View Post
      ...kannst Du das ganze group by.. having .. doch wohl weglassen oder?
      Oder eben ganz "klassisch" die Mengen in der Where-Klausel mit Exists abfragen. Dann ist es auch ganz klar und eindeutig ob man nun die Schnittmenge (AND) oder die Vereinigungsmenge (OR) bildet.

      Vereinigungsmenge :
      [highlight=sql]
      ...
      where
      exists (select ... )
      or
      exists (select ... )
      ...
      [/highlight]
      Schnittmenge:
      [highlight=sql]
      ...
      where
      exists (select ... )
      and
      exists (select ... )
      ...
      [/highlight]
      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


      • #18
        guten morgen,

        das mit dem WHERE exists muss ich mal probieren, klingt ja schon vielversprechend. Das mit dem Verteiler 2011 und 2012, warum ist dir schleierhaft wo das herkommt? Wie gesagt im Bild habe ich ja das Beispiel verwendet. Man hat in einer Gruppe den Verteiler 2011 und in der anderen den Verteiler 2012.
        Die WHERE Bedingung der SQL Abfrage wird nun "automatisch" erzeugt. Je nachdem welche Werte ausgewählt wurden.

        Werde jetzt die Auswahlmöglichkeiten in mehrere Stufen aufteilen, und je nachdem was ausgewählt wird, wird die dafür vorhergesehene Stufe verwendet.

        Stufe 1, ein Verteiler je Gruppe(gilt natürlich nur solange [Anzahl] Gruppen auch immer nur 1 oder 0 Verteiler je Gruppe hat):
        Gruppe 1:
        Verteiler 2011
        Gruppe 2:
        Verteiler 2012
        Gruppe 3:
        Verteiler 2013
        [highlight=sql]
        WHERE
        av.verteiler_id = 2011 OR
        av.verteiler_id = 2012 OR
        av.verteiler_id = 2013
        [/highlight]

        Stufe 2, zwei Verteiler je Gruppe(gilt natürlich nur wenn in maximal einer Gruppe 2 Verteiler sind, und in den restlichen keine Verteiler):
        Grupe 1:
        Verteiler 2011
        Verteiler 2012
        Gruppe 2:
        Werbung Deutsch
        [highlight=sql]
        WHERE
        av.verteiler_id IN (2011,2012)
        OR
        ka.inland = 1
        GROUP BY ka.id
        HAVING
        COUNT(DISTINCT av.verteiler_id) = 2
        [/highlight]

        Stufe 3, zwei oder mehr Verteiler in einer Gruppe, ein oder mehr Verteiler in einer anderen Gruppe(das muss ich jetzt noch angehen, und euer vorgeschlagenes WHERE existss hört sich dafür ja sehr interessant an)
        Es kann die Schnittmenge sein, kann aber auch die Vereinigungsmenge sein, je nachdem was der User auswählt und es in den Gruppen positioniert.

        edit:
        also stufe 3 ist nun auch fertig.
        Habe jetzt als beispiel einfach genommen:
        Gruppe 1:
        2011
        2012
        Gruppe 2:
        2013

        [highlight=sql]
        SELECT DISTINCT
        kf.firma,
        kf.firma2,
        kf.kundennummer,
        kf.erstell_datum,
        kf.mitarbeiter,
        ka.*
        FROM admin_kunden_firma kf
        LEFT JOIN admin_kunden_ansprechpartner ka ON kf.kundennummer = ka.kundennummer
        LEFT JOIN admin_kunden_verteiler av ON av.kunden_id = ka.id
        WHERE
        (
        EXISTS (SELECT DISTINCT akv.id FROM admin_kunden_verteiler akv WHERE akv.verteiler_id
        IN(2011,2012) AND ka.id = akv.kunden_id GROUP BY akv.kunden_id HAVING COUNT(DISTINCT
        akv.verteiler_id)=2)
        )
        OR
        (
        EXISTS (SELECT DISTINCT akv.id FROM admin_kunden_verteiler akv WHERE akv.verteiler_id IN(2013)
        AND ka.id = akv.kunden_id GROUP BY akv.kunden_id HAVING COUNT(DISTINCT akv.verteiler_id)=1)
        )
        ORDER BY kf.kundennummer
        [/highlight]

        bis jetzt funktioniert alles so wie es soll.
        Vielen Dank, der Tipp mit dem Exists war echt Gold Wert.
        Zuletzt editiert von carsten_87; 09.05.2012, 12:10. Reason: stufe 3

        Comment

        Working...
        X