
111945
08.04.2015
MS SQL View - Zeile in Spalte
Hallo Zusammen,
folgende View habe ich erstellt und folgendes Ergebnis bekommen. Leider brauche ich die Rufnummernart in einer Spalte, sodass ich zum guten Schluss nur eine Zeile als Ausgabe bekomme.
Vielleicht hat jemand ideen, wie das gelößt wird.
Vielen Dank
Ausgabe:
folgende View habe ich erstellt und folgendes Ergebnis bekommen. Leider brauche ich die Rufnummernart in einer Spalte, sodass ich zum guten Schluss nur eine Zeile als Ausgabe bekomme.
Vielleicht hat jemand ideen, wie das gelößt wird.
Vielen Dank
SELECT
dbo.Firma.Name1, dbo.Firma.Name2, dbo.Firma.Name3, dbo.Firma.Name4, dbo.Firma.Name5, dbo.Firma.Gruppe, dbo.KommFirma.Art, dbo.KommFirma.Anschluß,
dbo.Person.Titel, dbo.Person.Anrede, dbo.Person.Vorname, dbo.Person.Nachname, dbo.KommDw.Art AS Expr1, dbo.KommDw.Anschluß AS Expr2,
dbo.Person.Gruppe2, dbo.Firma.Gruppe2 AS Expr3, dbo.Firma.Straße, dbo.Firma.Land, dbo.Firma.PLZ, dbo.Firma.Ort, dbo.Firma.PPLZ, dbo.Firma.PFort,
dbo.Firma.Postfach
FROM dbo.Person INNER JOIN
dbo.KommDw ON dbo.Person.PID = dbo.KommDw.PID INNER JOIN
dbo.Firma ON dbo.KommDw.FID = dbo.Firma.FID INNER JOIN
dbo.KommFirma ON dbo.Firma.FID = dbo.KommFirma.FID
WHERE (dbo.Firma.Name1 = 'H_Name1')
Ausgabe:
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 268545
Url: https://administrator.de/forum/ms-sql-view-zeile-in-spalte-268545.html
Ausgedruckt am: 07.04.2025 um 18:04 Uhr
1 Kommentar
Hallo StfnCstr,
drei Möglichkeiten:
1. Es gibt eine begrenzte Zahl an Kommunikationsarten (z.B. Telefon, Fax, Email und Mobil) und jeder darf nur jeweils eine dieser Kommunikationsmittel besitzen. Dann kannst Du die Kommunikationstabelle für jede Art mit left join einbinden und hast lauter einzelne Spalten für jedes Kommunikationmittel. Für KommFirma könnte das etwa so aussehen:
2. Evtl. mit der Pivot-Funktion (ist in der Hilfe beschrieben, nutze ich auch nicht täglich
). Ist ähnlich wie Punkt 1., nutzt aber eine SQL-Funktion.
3. Du liest alle Kommunikationsmittel zu einer Person in einen Text ein (z.B. "Fon: 123, Fax: 456, Email: sonstwas@irgendwo.de") und fügst dann die eine Textspalte ein. Das Zusammenlesen geht z.B. mit XML ganz gut:
Gruß, Mad Max
drei Möglichkeiten:
1. Es gibt eine begrenzte Zahl an Kommunikationsarten (z.B. Telefon, Fax, Email und Mobil) und jeder darf nur jeweils eine dieser Kommunikationsmittel besitzen. Dann kannst Du die Kommunikationstabelle für jede Art mit left join einbinden und hast lauter einzelne Spalten für jedes Kommunikationmittel. Für KommFirma könnte das etwa so aussehen:
SELECT
dbo.Firma.Name1, dbo.Firma.Name2, dbo.Firma.Name3, dbo.Firma.Name4, dbo.Firma.Name5, dbo.Firma.Gruppe, t.Anschluß as Telefon, x.Anschluß as Telefax, e.Anschluß as eMail,
dbo.Person.Titel, dbo.Person.Anrede, dbo.Person.Vorname, dbo.Person.Nachname, dbo.KommDw.Art AS Expr1, dbo.KommDw.Anschluß AS Expr2,
dbo.Person.Gruppe2, dbo.Firma.Gruppe2 AS Expr3, dbo.Firma.Straße, dbo.Firma.Land, dbo.Firma.PLZ, dbo.Firma.Ort, dbo.Firma.PPLZ, dbo.Firma.PFort,
dbo.Firma.Postfach
FROM dbo.Person INNER JOIN
dbo.KommDw ON dbo.Person.PID = dbo.KommDw.PID INNER JOIN
dbo.Firma ON dbo.KommDw.FID = dbo.Firma.FID
left join dbo.KommFirma t ON dbo.Firma.FID = t.FID and t.Art = 'Telefon'
left join dbo.KommFirma x ON dbo.Firma.FID = x.FID and x.Art = 'Telefax'
left join dbo.KommFirma e ON dbo.Firma.FID = e.FID and e.Art = 'eMail'
WHERE (dbo.Firma.Name1 = 'H_Name1')
2. Evtl. mit der Pivot-Funktion (ist in der Hilfe beschrieben, nutze ich auch nicht täglich
3. Du liest alle Kommunikationsmittel zu einer Person in einen Text ein (z.B. "Fon: 123, Fax: 456, Email: sonstwas@irgendwo.de") und fügst dann die eine Textspalte ein. Das Zusammenlesen geht z.B. mit XML ganz gut:
SELECT
dbo.Firma.Name1, dbo.Firma.Name2, dbo.Firma.Name3, dbo.Firma.Name4, dbo.Firma.Name5, dbo.Firma.Gruppe, k.KommMittel,
dbo.Person.Titel, dbo.Person.Anrede, dbo.Person.Vorname, dbo.Person.Nachname, dbo.KommDw.Art AS Expr1, dbo.KommDw.Anschluß AS Expr2,
dbo.Person.Gruppe2, dbo.Firma.Gruppe2 AS Expr3, dbo.Firma.Straße, dbo.Firma.Land, dbo.Firma.PLZ, dbo.Firma.Ort, dbo.Firma.PPLZ, dbo.Firma.PFort,
dbo.Firma.Postfach
FROM dbo.Person INNER JOIN
dbo.KommDw ON dbo.Person.PID = dbo.KommDw.PID INNER JOIN
dbo.Firma ON dbo.KommDw.FID = dbo.Firma.FID
cross apply (select (select Art + ': ' + Anschluß + ', ' from KommFirma where FID = Firma.FID order by Art for xml path, type).value ('.', 'varchar (max)') as KommMittel) k
WHERE (dbo.Firma.Name1 = 'H_Name1')
Gruß, Mad Max