none
Normalisierung einer Tabelle RRS feed

  • Frage

  • Hallo,

    ich bin noch recht neu auf dem Gebiet und stehe vor folgendem Problem.
    Die Daten, die vorliegen, sollen normalisiert werden.

    MANDT	VTINT		SLNID	ATINN				VALC
    200		0000000304	00001	G_GEAR_VERSION		10
    200		0000000304	00001	G_GEAR_VERSION		20
    200		0000000304	00001	G_GEAR_VERSION		30
    200		0000000304	00001	G_GEAR_VERSION		NICKEL
    200		0000000304	00001	G_GEAR_VERSION		SIDEL
    200		0000000304	00001	B_COUNTRY_SELECTION	DE
    
    200		0000000304	00002	G_GEAR_VERSION		PH_K
    200		0000000304	00002	G_GEAR_VERSION		STD
    200		0000000304	00002	G_GEAR_VERSION		VACUUM
    200		0000000304	00002	B_COUNTRY_SELECTION	DE
    200		0000000304	00002	B_COUNTRY_SELECTION	US
    
    200		0000000304	00003	G_GEAR_VERSION		BDW
    200		0000000304	00003	G_GEAR_VERSION		BDW_LL
    200		0000000304	00003	G_GEAR_VERSION		FD
    200		0000000304	00003	G_GEAR_VERSION		FD_LL
    200		0000000304	00003	G_GEAR_VERSION		LL
    200		0000000304	00003	B_COUNTRY_SELECTION	US

    Als Endprodukt bräuchte ich diese Tabelle

    Die Spalteanzahl kann dabei ebenfalls variable sein.

    MANDT	VTINT		SLNID	G_GEAR_VERSION	B_COUNTRY_SELECTION
    200	0000000304	00001	10		DE
    200	0000000304	00001	20		DE
    200	0000000304	00001	30		DE
    200	0000000304	00001	NICKEL		DE
    200	0000000304	00001	SIDEL		DE
    
    200	0000000304	00002	PH_K		DE
    200	0000000304	00002	STD		DE
    200	0000000304	00002	VACUUM		DE
    200	0000000304	00002	PH_K		US
    200	0000000304	00002	STD		US
    200	0000000304	00002	VACUUM		US
    
    200	0000000304	00003	BDW		US
    200	0000000304	00003	BDW_LL		US
    200	0000000304	00003	FD		US
    200	0000000304	00003	FD_LL		US
    200	0000000304	00003	LL		US

    Gibt es eine einfache Möglichkeit dies zu erreichen?






    • Bearbeitet Elf1sh Montag, 29. Februar 2016 14:18
    Montag, 29. Februar 2016 13:51

Antworten

Alle Antworten

  • Hallo,

    Wenn ich Dich richtig verstanden habe, solltest Du es so abfragen können:

    SELECT G.MANDNT, G.VTINT, G.SLNID, G.VALC AS G_GEAR_VERSION, B.VALC AS B_COUNTRY_SELECTION
    FROM Tabelle AS G
         INNER JOIN
         Tabelle AS B
             ON G.MANDNT = B.MANDNT
                AND G.VTINT = B.VTINT
                AND G.SLNID = B.SLNID
    WHERE G.ATINN = 'G_GEAR_VERSION'
          AND B.ATINN = 'B_COUNTRY_SELECTION'


    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Montag, 29. Februar 2016 14:13
  • Vielleicht besser ein LEFT JOIN?

    Einen schönen Tag noch, Christoph -- Data Platform MVP - http://www.insidesql.org/blogs/cmu

    Montag, 29. Februar 2016 14:15
  • Scheint zu funktionieren.

    Ich habe oben noch ergänzt, dass die Spaltenanzahl leider für andere VTINTs variable sein kann.

    Montag, 29. Februar 2016 14:22
  • Eine Variable Anzahl Spalten für eine Tabelle geht nicht, die Spalten müssen fest definiert sein.

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Montag, 29. Februar 2016 14:28
  • Eine Variable Anzahl Spalten für eine Tabelle geht nicht, die Spalten müssen fest definiert sein.

    Olaf Helper

    Hallo,

    in einer anderen Tabellen steht die exakte Struktur.
    Es ist nur wie gesagt so, dass die Struktur für jedes VTINT anders sein kann.
    Ich könnte also vorher die Tabellen erstellen und dann befüllen.
    Oder hat jemand eine bessere Idee?

    PS:
    Bei vielen Spalten explodieren dann nicht die Joins?

    Montag, 29. Februar 2016 15:55
  • Bei vielen Spalten explodieren dann nicht die Joins?


    Wenn die Spalten, über die gejoint wird, indiziert sind, ist das kein Problem, nur etwas Fleißarbeit.

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Dienstag, 1. März 2016 07:41