Tabellenspalte mit Mehrfachwerten

CharlyOli

Aktiver Benutzer
Beiträge
31
Hallo zusammen,

bräuchte mal wieder eure Hilfe. Ich arbeite an einer Masterdatenbank für Fensterprofile.
Habe eine View welche mir alle Profile einer bestimmten Gattung anzeigt:

Code:
Artikelnummer      Bezeichnung                    Bautiefe     Profilsystem ID
6009               6009 Blendrahmen 84 mm         82,5         3240    
7008               7008 Blendrahmen 74 mm         74,0         3330   
8001               8001 Blendrahmen 66 mm         74,0         3325    
6802               6802 Blendrahmen 86 mm        120,0         3349|7112   
8002               8002 Blendrahmen 66 mm         74,0         3325   
8006               8006 Blendrahmen 66 mm         74,0         3325


Mein Problem ist die Spalte "Profilsystem ID" hier sind die ID´s zur Tabelle Profilsystem hinterlegt.
Leider auch wie beim Profil 6802 als Mehrfachmöglichkeiten.

Ich würde gerne das Profilsystem mit ausgeben, aber ich weis nicht wie ich das bei dieser Spaltenanordnung machen soll.
Die Daten bekomme ich vom Hersteller und er sagt, es ist nicht anders möglich.
Richtig wäre eine extra Tabelle mit den Artikelnummern und jew. ProfilsystemID´s.

Könnt ihr mir helfen?!

VG
CharlyOli
 
Werbung:
Richtig wäre eine extra Tabelle mit den Artikelnummern und jew. ProfilsystemID´s.

Könnt ihr mir helfen?!

Was genau erwartest Du, Du kennst doch die richtige Lösung?

Mal abgesehen von Lösungen wie ARRAY-Datentypen, mit denen man das noch relativ schmerzfrei handeln könnte, sollte man IMMER gescheit normalisieren.
 
Wenn mir jemand sagen könnte, wie ich die vorhandenen Daten normalieren kann, dann wäre mir geholfen.
Dass die Daten so nicht gut sind weis ich selbst, jedoch bekomme ich sie eben so vom Hersteller.
 
Kann ich Dir zeigen, ich nutze aber eine andere DB:

Code:
edb=*# select * from charlyoli ;
  id  |  profil   
------+-----------
 6009 | 3240
 7008 | 3330
 6802 | 3349|7112
(3 rows)

edb=*# create table so_ist_besser as select id, regexp_split_to_table(profil,'\|') from charlyoli ;
SELECT 4
edb=*# select * from so_ist_besser ;
  id  | regexp_split_to_table
------+-----------------------
 6009 | 3240
 7008 | 3330
 6802 | 3349
 6802 | 7112
(4 rows)

edb=*#
 
Mit SQL Server 2016 geht das:

Code:
select t.artikelnummer, p.value as id
from the_table t
  cross apply string_split(t.profilsystem_id, '|') as p
order by t.artikelnummer;
 
Funktioniert!!!

Mein Statement:

Code:
SELECT id, Profile_System_Ids, Value
FROM IMPORT_WinDoPlan_XML_Rahmen 
    CROSS APPLY STRING_SPLIT(Profile_System_Ids, '|')
    Where id = '3041'


Ergebnis:

Code:
id          Profile_System_Ids     Value
3041        3039|5304              3039
3041        3039|5304              5304

Vielen lieben Dank an dich akretschmer.

Gruß
CharlyOli
 
Werbung:
Zurück
Oben