Re(2): MSSQL - Transpose
Geizhals » Forum » Programmierung » MSSQL - Transpose (33 Beiträge, 440 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
MSSQL - Transpose
20.01.2011, 21:36:54
Hallo

Ich melde mich mal wieder mit einem Problem an dem ich derzeit scheitere. Ich habe folgende Datenstruktur:

Table: ARTIKEL
ARTIKEL     NAME
100-1001    Produkt1
100-1002    Produkt2

Table: ARTIKELLIEFERANT
ARTIKEL      LIEFERANTNAME       LIEFERANTBESTNR
100-1001     DiTech              0815
100-1001     E-Tec               4711
100-1001     Amazon              1112
100-1002     Teufel              A012
100-1002     Hofer               8273


Was ich nun gerne hätte ist folgendes:

ARTIKEL   NAME        LIEF1   LIEFNR1    LIEF2  LIEFNR2    LIEF3  LIEFNR3
100-1001  Produkt1    DiTech  0815       E-Tec  4711       Amazon 1112
100-1002  Produkt2    Teufel  A012       Hofer  8273       NULL   NULL


Dabei kommen maximal 3 Zeilen zu einem "Artikel" vor, sollten es mehr sein -> irrelevant.

Irgendwie komme ich bei der Fragestellung nicht ganz auf einen grünen Zweig. Versucht hätte ich es mittels PIVOT aber entweder es geht damit nicht oder ich habe mit zu dumm angestellt.

Achja, ich würde das ganze für viele Artikel in einer View benötigen, d.h. ich weiss nicht ob eine Lösung evtl. mittels Cursor hier sinnvoll wäre?

SQL Server wäre ein 2005er wenn das relevant ist :)

Danke mal im Voraus an die Spezialisten hier :)

Wenn der Sturm losbricht,
verstummen die Einen vor Schrecken,
und die Anderen breiten, einem Adler gleich, die Flügel aus
und schwingen sich empor.

Herzlichen Dank an Raydoo für die Fotos

Antworten PM Alle Chronologisch
 
Melden nicht möglich
.  Re: MSSQL - Transpose  (kiff-kiff am 21.01.2011, 07:36:47)
.  Re: MSSQL - Transpose  (zeddicus am 21.01.2011, 10:24:14)
..  Re(2): MSSQL - Transpose  (Somnatic am 21.01.2011, 10:33:19)
...  Re(3): MSSQL - Transpose  (zeddicus am 21.01.2011, 12:08:05)
....  Re(4): MSSQL - Transpose  (Somnatic am 21.01.2011, 22:54:52)
....  Re(4): MSSQL - Transpose  (Somnatic am 23.01.2011, 09:20:13)
.  Re: MSSQL - Transpose  (King_Uli am 21.01.2011, 17:05:56)
..  Re(2): MSSQL - Transpose  (Somnatic am 21.01.2011, 22:54:27)
...  Re(3): MSSQL - Transpose  (King_Uli am 22.01.2011, 18:16:35)
. Vom Autor zurückgezogen oder Autor hat seine Registrierung nicht bestätigt  (blitzfreak am 23.01.2011, 01:01:37)
.  Re: MSSQL - Transpose  (blitzfreak am 23.01.2011, 01:02:20)
..  Re(2): MSSQL - Transpose  (Somnatic am 23.01.2011, 09:21:27)
...  Re(3): MSSQL - Transpose  (blitzfreak am 23.01.2011, 15:56:05)
....  Re(4): MSSQL - Transpose  (Somnatic am 23.01.2011, 20:06:15)
.....  Re(5): MSSQL - Transpose  (blitzfreak am 23.01.2011, 20:43:53)
......  Re(6): MSSQL - Transpose  (Somnatic am 23.01.2011, 22:34:16)
..  Re(2): MSSQL - Transpose  (Somnatic am 23.01.2011, 20:18:02)
...  Re(3): MSSQL - Transpose  (blitzfreak am 23.01.2011, 20:40:29)
.  Re: MSSQL - Transpose  (kiff-kiff am 23.01.2011, 08:44:54)
..
Re(2): MSSQL - Transpose
23.01.2011, 09:20:04
Hehe, MSSQL kennt zwar ein TOP, aber kein LIMIT ... das heisst nix mit limit 0,1

Jetzt gäbe es natürlich die Lösung das mit zwei verschachtelten Schleifen abzubilden, ist aber sicher alles andere als performant.

Ich habe mir jetzt mal angesehen wie mit den Daten umgegangen wird und bin zum Schluss gekommen dass an den Daten nur ganz selten (2,3 mal am Tag) was geändert wird, diese aber oft abgefragt werden.

Ich habe daher die Lösung von zeddicus genommen und meinen Anforderungen nach adaptiert. Nun wird nach einer Änderung der Daten mittels eines Triggers eine entsprechende Tabelle mit den gesamten Daten aktualisiert. Die Views greifen dann auf diese Zwischentabelle zurück. Das hat den Vorteil dass ich die Views sehr einfach halten kann, weil alle Daten im Prinzip schon in der Zwischentabelle drin sind und ich nur noch nach den entsprechenden Eigenschaften filtern muss.
Nachteil ist natürlich dass sich die Daten 2x in der Datenbank befinden, das wird jedoch dadurch gelöst dass diese Tabelle eben quasi "von der DB selbst" generiert wird. Der Client bekommt davon gar nichts mit.

Ich denke das ist eine Lösung mit der wir sicher die nächsten 5 Jahre überdauern können (und wahrscheinlich auch länger).

Daher danke an alle die hier mitgeholfen haben :)

Wenn der Sturm losbricht,
verstummen die Einen vor Schrecken,
und die Anderen breiten, einem Adler gleich, die Flügel aus
und schwingen sich empor.

Herzlichen Dank an Raydoo für die Fotos

Antworten PM Alle Chronologisch Zum Vorgänger
 
Melden nicht möglich
...  Re(3): MSSQL - Transpose  (King_Uli am 23.01.2011, 11:50:30)
....  Re(4): MSSQL - Transpose  (kiff-kiff am 23.01.2011, 12:51:06)
.....  Re(5): MSSQL - Transpose  (blitzfreak am 23.01.2011, 15:53:23)
......  Re(6): MSSQL - Transpose  (zeddicus am 23.01.2011, 20:52:19)
.......  Re(7): MSSQL - Transpose  (blitzfreak am 23.01.2011, 20:53:40)
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung