SQL MSSQL Erstellung einer View

dInZz

Newbie
Registriert
Mai 2024
Beiträge
2
Hallo, ich bräuchte mal Hilfe bei einer MSSQL View. Ich habe 2 Tabellen die wie folgt aussehen.

Tabelle1
Kunden_IDKunden_Name
100Name1
101Name2
102Name3

Tabelle2
IDKunden_IDRufnummer
11001234
21015678
31029876
41003627
51009999

Diese 2 Tabellen sollen in einer View zusammengefasst werden. Ergebnis soll so aussehen.
Kunden_IDKunden_NameRufnummer1Rufnummer2Rufnummer3Rufnummer4Rufnummer5
100Name1123436279999NULLNULL
101Name25678NULLNULLNULLNULL
102Name39876NULLNULLNULLNULL

Ein Kunde kann bis zu 5 Rufnummern haben. Wie müsste hier die Abfrage der View aussehen?
 
Die View sieht aktuell so aus.

SELECT dbo.Tabelle1., dbo.Tabelle2.
FROM dbo.Tabelle2 INNER JOIN
dbo.Tabelle1 ON Tabelle2.customer_number = Tabelle1.customer_number

Gibt mir folgendes Ergebnis.

IDKunden_IDKunden_NameRufnummer
1100Name11234
2101Name25678
3102Name39876
4100Name13627
5100Name19999

Aber alle Rufnummern eines Kunden sollen in einer Zeile stehen.
 
Habs mal mit ChatGPT probiert :) Der spuckt den folgenden Code aus

SQL:
CREATE VIEW KundenRufnummern AS
WITH Rufnummern AS (
    SELECT
        T2.Kunden_ID,
        T1.Kunden_Name,
        T2.Rufnummer,
        'Rufnummer' + CAST(ROW_NUMBER() OVER (PARTITION BY T2.Kunden_ID ORDER BY T2.ID) AS VARCHAR(10)) AS RufnummerLabel
    FROM
        Tabelle1 T1
    JOIN
        Tabelle2 T2 ON T1.Kunden_ID = T2.Kunden_ID
)
SELECT
    Kunden_ID,
    Kunden_Name,
    MAX(CASE WHEN RufnummerLabel = 'Rufnummer1' THEN Rufnummer ELSE NULL END) AS Rufnummer1,
    MAX(CASE WHEN RufnummerLabel = 'Rufnummer2' THEN Rufnummer ELSE NULL END) AS Rufnummer2,
    MAX(CASE WHEN RufnummerLabel = 'Rufnummer3' THEN Rufnummer ELSE NULL END) AS Rufnummer3,
    MAX(CASE WHEN RufnummerLabel = 'Rufnummer4' THEN Rufnummer ELSE NULL END) AS Rufnummer4,
    MAX(CASE WHEN RufnummerLabel = 'Rufnummer5' THEN Rufnummer ELSE NULL END) AS Rufnummer5
FROM
    Rufnummern
GROUP BY
    Kunden_ID, Kunden_Name;
 
Zurück
Oben