111945
Apr 08, 2015
2107
1
0
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:
Please also mark the comments that contributed to the solution of the article
Content-Key: 268545
Url: https://administrator.de/contentid/268545
Printed on: April 26, 2024 at 13:04 o'clock
1 Comment
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 ). 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:
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