n:n durch Pivot anzeigen

13/10/2009 - 19:54 von Patrick Pohlmann | Report spam
Hallo Zusammen,

ich habe drei Tabellen. Diese sehen wie folgt aus:

Tabelle: tbl_Personen

PersID; Name; Vorname
1;Müller; Max
2;Müller; Hans
3;Meier; Heinrich

Tabelle: tbl_Aktionen

AktionsID;Aktionsbezeichnung
1; Aktion 2008 1
2; Aktion 2008 2
3; Aktion 2009 1

Tabelle: tbl_AktionsLink

Diese Tabelle führt die beiden Zusammen, sagt also, welche Person an welcher
Aktion teilgenommen hat:

AktionsLinkID; PersID; AktionsID
1;1;1
2;1;3
3;2;2
4;3;3

Aus diesen Werten würde ich jetzt gerne folgende Anzeige generieren (am
liebsten dynamisch, aber das bekomme ich ggf. hin wenn ich den Grundgedanken
verstehe):

PersID;Name;Vorname;"Aktion 2008 1"; "Aktion 2008 2"; "Aktion 2009 1"
1;Müller; Max;1;0;1
2;Müller; Hans;0;1;0
3;Meier; Heinrich;0;0;1

Das Ganze sieht ja sehr nach einer Pivotabfrage aus, aber dazu fehlt mir
irgendwie das Detailfeld. Vielleicht stehe ich auch einfach nur auf dem
Schlauch.

Wàre toll, wenn mir da jemand runterhelfen könnte.

Vielen Dank und viele Grüße

Patrick
 

Lesen sie die antworten

#1 Stefan Hoffmann
14/10/2009 - 14:24 | Warnen spam
hallo Patrik,

Patrick Pohlmann wrote:
Das Ganze sieht ja sehr nach einer Pivotabfrage aus, aber dazu fehlt mir
irgendwie das Detailfeld. Vielleicht stehe ich auch einfach nur auf dem
Schlauch.


Jo, das Problem ist aber, das die PIVOT-Funktion einen fixe Werteliste
braucht:

SELECT P.* FROM
(
SELECT TA.Aktionsbezeichnung,
P.PersID,
P.Name,
P.EinTollesDetailFeld
FROM tbl_Personen TP
INNER JOIN tbl_AktionsLink TAL ON TAL.PersID = TP.PersID
INNER JOIN tbl_Aktionen TA ON TA.AktionsID = TAL.AktionsID
) S
PIVOT
(
SUM(EinTollesDetailFeld)
FOR Aktionsbezeichnung IN
([Aktion 2008 1], [Aktion 2008 2],[Aktion 200p 1])
) P

Für dynamische Spalten brauchst du XML, siehe

http://www.kodyaz.com/articles/t-sq...-code.aspx


mfG

Ähnliche fragen