Aus 1 mach (bis zu) 5.



  • Hallo

    Ich denke, ich habe ein recht alltägliches Problem, aber ich kenne den geeigneten Weg zur Lösung wohl noch nicht: Gegeben ist eine Adressverwaltung mit Ansprechspartnern, die bis zu 4 Telefone, sowie einen Fax eintragen dürfen. Nun möchte ich alle Nummern - nicht nur die Ansprechpartner selbst - in eine andere Tabelle bekommen, damit man sie später weiterverarbeiten kann. Ich möchte eine Transformation nach folgendem System:

    Peter Muster|123|456|789
    
    123|Peter Muster
    456|Peter Muster
    789|Peter Muster
    

    Wie sieht ein T-SQL Query aus, welches mir die Daten so aufbereitet? Oder muss ich mehrere SELECT s über UNION mergen?

    Besten Dank für die Hilfe 🙂



  • Speicherst du alle Telefonnummern in nur einem einzigem Feld? Das solltest du nicht tun.



  • Jede Telefonnummer hat eine eigene Spalte; jeder Ansprechpartner hat eine Zeile, dort sind 5 Spalten mit den Nummern.

    Nun will ich bis zu 5 Zeilen für die Nummern, wo immer auch der Ansprechpartner steht. So eine Art Pivot.

    Verständlicher? 😃

    PS: Nein, ich habe die Datenbank nicht designed.



  • Ich glaube du musst hier UNION einsetzen:

    (
    SELECT name, mobile AS phone
    FROM table
    WHERE mobile IS NOT NULL
    
    UNION
    
    SELECT name, landline AS phone
    FROM table
    WHERE landline IS NOT NULL
    
    UNION
    
    ...
    )
    ORDER BY name ASC
    

    MfG SideWinder



  • @SideWinder: Danke. Ich habe befürchtet, dass es darauf hinaus läuft und darum war ich auf der Suche nach einem eleganteren Weg.

    Aber ja, dann gibts halt einen Haufen UNION s und JOIN s. 🤡

    Danke.

    EDITEDIT: Ich habe einen Weg gefunden mittels UNPIVOT 💡



  • Poste doch mal ein bsp. Das machts einfacher wenns mal jemand anders auch braucht



  • Ja, sehr gerne. Ich habe gezögert, weil es nicht gerade sehr verständlich ist:

    SELECT
        Contact,
        [Description],
        Number
    FROM
        #... AS ...
    UNPIVOT
        (
            Number FOR Numbers IN (AAS_SBTEL1, AAS_SBTEL2, AAS_SBTEL3, AAS_SBFAX)
        ) [UNPIVOT]
    WHERE
        NOT LEN(Number) = 0
    

    Erläuterungen:

    • AAS_SBTEL1 , AAS_SBTEL2 , AAS_SBTEL3 und AAS_SBFAX sind die Spalten mit den Nummern.
    • Name und [Description] sind einfache Strings.

    Dabei bekommt man alle Nummern und die dazu gehörenden Informationen (Ansprechperson, Beschreibung, etc.).

    Hoffe, das ich jemandem damit helfen konnte. Besten Dank nochmals an alle 👍


Anmelden zum Antworten