Re(3): MSSQL - Transpose
Geizhals » Forum » Programmierung » MSSQL - Transpose (33 Beiträge, 446 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
21.01.2011, 12:08:05
ich auch net, drum sind meine lösungen meist eher improvisiert ;)

also die tabelle neu aufbaun (is nur so dahingeschrieben, muss net funktionieren, und ist sicher keine schöne lösung) (ok, eigentlich superhäßlich)

wenn die tabelle angelegt ist und neuetabelle heißt, gings in etwa so:

truncate table neuetabelle

insert into neuetabelle (artikel, [name]) select distinct artikel, [name] from artikel
update neuetabelle
set lief1 = (select top 1 lieferantname from artikellieferant where artikel  = neuetabelle.artikel),
set liefnr1 = (select lieferantbestnr from artikellieferant where artikel = neuetabelle.artikel and lieferantname = neuetabelle.lief1),
set lief2 = (select top 1 lieferantname from artikellieferant where artikel  = neuetabelle.artikel and not lieferantname = neuetabelle.lief1),
set liefnr2 = (select lieferantbestnr from artikellieferant where artikel = neuetabelle.artikel and lieferantname = neuetabelle.lief2),
set lief3 = (select top 1 lieferantname from artikellieferant where artikel  = neuetabelle.artikel and not lieferantname = neuetabelle.lief1 and not lieferantname = neuetabelle.lief2),
set liefnr3 = (select lieferantbestnr from artikellieferant where artikel = neuetabelle.artikel and lieferantname = neuetabelle.lief3)


danach hättest die table. ist aber wirklich sauhäßlich, aber zumindest hättest mal deine tabelle :)



Edit: für die top 1 queries müsstest ev. noch ein order by einbaun, damits deterministischer ist welche 3 ausgewählt werden (zb. order by lieferantname)

Bin mir jetzt net sicher ob der inhalt gleich aktualisiert wird zwecks der subqueries, oder ob dus in einzelne updates aufteilen müsstest

21.01.2011, 12:11 Uhr - Editiert von zeddicus, alte Version: hier
Antworten PM Alle Chronologisch Zum Vorgänger
 
Melden nicht möglich
....  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  (Somnatic am 23.01.2011, 09:20:04)
...  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