SQL Abfrage - Mehrfachwerte tauchen auf

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    SQL Abfrage - Mehrfachwerte tauchen auf

    Hallo zusammen!

    Ich versuche gerade Daten abzurufen aus meinen SQL Tabellen. Irgendwie kriege ich aber keine Lösung gebastelt...

    Ausgangssituation:
    - Table_Kunden mit Spalten ID,Kundenname,Info
    - Table_Pakete mit Spalten ID,Paketbezeichnung
    - Table_Abholungen mit Spalten ID,Kunden,Pakete


    In Table_Abholungen sind in den Spalten Kunden und Pakete werte wie
    1
    1,55
    2,32,40

    Diese Zahlen sind die jeweiligen IDs zu den Kunden oder Paketen. Nun möchte ich nach paket 2 suchen. Das klappt soweit auch. Wenn ich nun in Spalte Pakete die IDs
    1,2 habe und in Spalte Kunden die IDs 1,2,3 Dann erhalte ich in Spalte Pakete auch drei Werte undzwar den Suchwert.

    Abfrage:

    SQL-Abfrage

    1. ​SELECT
    2. Table_Abholungen.ID ID,
    3. STRING_AGG(Table_Kunden.Kundenname, ', ') AS Kunden,
    4. STRING_AGG(Table_Pakete.Paketbezeichnung, ', ') AS Pakete
    5. FROM Table_Abholungen Table_Abholungen
    6. JOIN Table_Kunden ON Table_Kunden.id IN (SELECT CAST(value AS INT) FROM STRING_SPLIT(Table_Abholungen.Kunden, ','))
    7. JOIN Table_Pakete ON Table_Pakete.id IN (SELECT CAST(value AS INT) FROM STRING_SPLIT(Table_Abholungen.Pakete, ','))
    8. WHERE Table_Pakete.Paketbezeichnung LIKE '%paket 2%' OR Table_Kunden.Kundenname LIKE '%paket 2%'
    9. GROUP BY Table_Abholungen.ID,Table_Pakete.Paketbezeichnung


    Gibt das aus
    599Paket 2, Paket 2, Paket 2Kunde A, Kunde B, Kunde C

    Richtig müsste sein
    599Paket 1, Paket 2Kunde A, Kunde B, Kunde C


    Ich weiß nicht wie ich den code korrigieren kann damit es das gewünschte Ergebnis erzielt.

    Vielleicht hat ja einer von Euch eine gute Idee wie man das lösen könnte.

    Vielen Dank und Grüße!
    Deine Abfrage und deine Beispiele passen nicht zusammen, Kundennamen kommen vor Paketbezeichnungen in der Query. Dein Beispiel sieht aber eher andersrum aus.
    Auf der anderen Seite laut dieser Bedingung Table_Kunden.Kundenname LIKE '%paket 2%' heißen die Kunden tatsächlich Paket 2???

    Alles verwirrend.
    Auf jeden Fall kann im Select von Kundenname oder Paketbezeichnung, welches auch immer nun die richtige ist (mach Spaltenbezeichnungen an deine Beispieldaten!)
    nie Paket 1 drinstehen, wenn du nur Paket 2 als Rückgabe kriegst, wie von dir angegeben:

    Sub7evenHH schrieb:

    Gibt das aus
    599 | Paket 2, Paket 2, Paket 2 | Kunde A, Kunde B, Kunde C

    Fahr mal das ab:

    SQL-Abfrage

    1. SELECT Table_Abholungen.ID, Table_Kunden.Kundenname, Table_Pakete.Paketbezeichnung
    2. FROM Table_Abholungen Table_Abholungen
    3. INNER JOIN Table_Kunden ON Table_Kunden.id IN (SELECT CAST(value AS INT) FROM STRING_SPLIT(Table_Abholungen.Kunden, ','))
    4. INNER JOIN Table_Pakete ON Table_Pakete.id IN (SELECT CAST(value AS INT) FROM STRING_SPLIT(Table_Abholungen.Pakete, ','))
    5. WHERE Table_Pakete.Paketbezeichnung LIKE '%paket 2%' OR Table_Kunden.Kundenname LIKE '%paket 2%'
    und poste ein anonymisiertes Teilergebnis
    Und bestätige nochmal, dass das Ergebnis, was du möchtest so aussehen soll wie in Post 1, denn in Post 1 gibt es mehrere Unstimmigkeiten.

    Vermutlich brauchst du nur ein Distinct im STRING_AGG