Kreuztabelle/Matrix aus 3 Tabellen

andreas.vogt

Neuer Benutzer
Beiträge
3
Hallo,
Für eine Übersicht der verwendeten (Word) 640 Schnellbausteine in 1200 Dokumentenvarianten benötige ich eine Übersicht.
Ich habe 3 Tabellen, die folgende Inhalte haben:
TABELLE 1 beinhaltet Schnellbausteine (ID, BAUSTEINNAME)
TABELLE2 beinhlatet Dokumentenvarianten (ID, DOCVARIANTE)
TABELLE3 ist eine kleine Matrix, die angibt, welcher Baustein in welchen Dokument(en) verbaut ist. Sie hat demnach die Spalten: ID, BAUSTEIN-ID und DOCVAR-ID

Wie kann ich nun eine Abfrage erstellen, die mir die Dokumentenvarianten in den Spalten und die Bausetinnamen in den Zeilen ausgibt. Zusammengesetzt aus der Matrixtabelle. Ein simples JA oder NEIN (Ja, wenn verbaut, nein wenn nicht) würde ausreichen in den Zellen.

Ich bin da am Verzweifeln, bekomme das mit den üblichen Beispielen (Adventureworks,..) nicht hin :-(

Danke für jeden Tipp ;-)
 
Werbung:
Du suchst PIVOT, irgendwie so:
Code:
select *
from
(
  select t1.BAUSTEINNAME,t2.DOCVARIANTE
  from tabelle1 t1
inner join tabelle3 t3
on t1.ID = t3.BAUSTEIN-ID
inner join tabelle2 t2
on t3.DOCVAR-ID = t2.ID
) t
pivot
(
  max(t.DOCVARIANTE)
  for t.BAUSTEINNAME in ([1], [2], [3])
) piv;
 
Du suchst PIVOT, irgendwie so:
Code:
select *
from
(
  select t1.BAUSTEINNAME,t2.DOCVARIANTE
  from tabelle1 t1
inner join tabelle3 t3
on t1.ID = t3.BAUSTEIN-ID
inner join tabelle2 t2
on t3.DOCVAR-ID = t2.ID
) t
pivot
(
  max(t.DOCVARIANTE)
  for t.BAUSTEINNAME in ([1], [2], [3])
) piv;

Hallo,
Danke für den ersten Hinweis, ich habe das wie folgt ergänzt durch die echten Tabellennamen:
Code:
select *
from
(
  select BST.BAUSTEINNAME,DOCVAR.DOKUMENTENVARIANTE
  from BT_BAUSTEINE BST
inner join BT_MATRIX MTX
on BST.ID = MTX.BAUSTEIN
inner join BT_DOCVARIANTEN DOCVAR
on MTX.VARIANTE = DOCVAR.ID
) t
pivot
(
  max(t.DOKUMENTENVARIANTE)
  for t.BAUSTEINNAME in ([1], [2], [3])
) piv;
Leider bekomme ich nur 3 Spalten (1,2,3) mit jeweils NULL.
Wie ist das [1] [2] zu verwenden? Da scheint etwas noch nicht zu stimmen..
Danke für jeden Hinweis,
Andreas
 
Ja 1,2,3 sind Beispielwerte, die musst du mit den echten Werten die in den Zellen stehen, ersetzen. Also wenn deine Bausteile jetzt A B und C heißen und du würdest [A],,[C] einsetzen erhieltest du etwa
Spalten: DOKUMENTENVARIANTE; A; B; C
Beispielwerte: Variante 1, nur mit Baustein A; A; NULL; NULL
 
Ja 1,2,3 sind Beispielwerte, die musst du mit den echten Werten die in den Zellen stehen, ersetzen. Also wenn deine Bausteile jetzt A B und C heißen und du würdest [A],,[C] einsetzen erhieltest du etwa
Spalten: DOKUMENTENVARIANTE; A; B; C
Beispielwerte: Variante 1, nur mit Baustein A; A; NULL; NULL

Wäre das auch dynamisch möglich? Wir haben ja 620 Bausteine, die sollten als SELECT dort hinein... :)
 
Werbung:
Es gibt die Möglichkeit mit dynamic SQL den Code für PIVOT zu erzeugen und auszuführen. Aber:

- dynamisches SQL ist frickelig, schwer zu debuggen und kann nicht grundsätzlich verwendet werden
- willst du wirklich eine Tabelle mit 620 Spalten? Wo ist da die Übersicht?

Wenn ein kleines, reguläre PIVOT mit einem Teil der Spalten bei dir läuft kannst du es gerne ausprobieren, hier ein Beispiel:
SQL Server dynamic PIVOT query?
 
Zurück
Oben