Re: MSSQL - Transpose
Geizhals » Forum » Programmierung » MSSQL - Transpose (33 Beiträge, 445 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
21.01.2011, 17:05:56
Hallo !

meine Lösung dafür wäre es mittels min() und max() den niedriegsten bzw den höchsten Wert herauszuzuschen.

Du wirst nicht umhin kommen eine etwas wildere Schleifkonstruktion zu basteln.

Ich poste hier meinen Code für eine Funktion , den du gerne abwandeln kannst.
( es handelt sich hier um ein Beispiel wo es um Autoren zu einem Buch (identifiziert über die ISBN) geht)

-> die @ISBN wäre in deinem Fall die Artikel Nummer


CREATE FUNCTION Bib.udf_Autoren_pro_ISBN
(@ISBN NVARCHAR(13))
RETURNS nvarchar(256)
AS
BEGIN
  DECLARE @Autoren nvarchar(256)
  DECLARE @NeuerAutor nvarchar(64)
  DECLARE @laufvariable int = 0
  DECLARE @MinAutorID int
  DECLARE @MaxAutorID int

  -- ermittle min und max Autor ID für den gegebenen Buch Titel
  SELECT @MinAutorID = MIN(AutorID) FROM tbl_ISBNAutor WHERE ISBN = @ISBN
  SELECT @MaxAutorID = MAX(AutorID) FROM tbl_ISBNAutor WHERE ISBN = @ISBN

  -- initialisiere Variablen für die WHILE Schleife
  SET @laufvariable = @MinAutorID
  SET @Autoren = ''

  WHILE @laufvariable <= @MaxAutorID
    BEGIN
  
      SET @NeuerAutor = ''
      
      SELECT @NeuerAutor = LTRIM(ISNULL(a.Vorname,'') + ' ' + a.Nachname)
      FROM Bib.tbl_ISBNAutor AS i
      JOIN Bib.tbl_BuchAutor AS a ON i.AutorID = a.AutorID
      WHERE i.ISBN = @ISBN AND i.AutorID = @laufvariable
      
      SET @Autoren = @Autoren + @NeuerAutor
        
      SET @laufvariable = @laufvariable + 1
      
      -- Komma setzen wenn nicht der letzte Autor
      IF @laufvariable <= @MaxAutorID AND @NeuerAutor <> ''
        SET @Autoren = @Autoren + ', '
    END
  RETURN @Autoren
END





Antworten PM Alle Chronologisch Zum Vorgänger
 
Melden nicht möglich
..  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