SQL Zeilen mit/ohne NULL-Werte gruppieren

K

knoxyz

Gast
Hallo :)

Hat jemand eine Idee wie folgende Zeilen zusammengefasst werden können?
Es wird der MS SQL Server 2008 verwendet.

Dieses Beispiel ist stark vereinfacht.
In der Realität werden mehre hunderttausend Zeilen und und etwa fünfzehn Materialien ausgewertet.


PHP:
ArtBez       Material_1    Menge_1       Material_2      Menge_2
Objekt1      abc		   5             NULL            NULL
Objekt1      NULL		  NULL          efg             3
Objekt2      abc		   3             NULL            NULL
Objekt2      NULL		  NULL          efg            2

Ziel ist:
PHP:
ArtBez       Material_1    Menge_1       Material_2      Menge_2
Objekt1      abc		   5             efg             3
Objekt2      abc		   3             efg             2

knoxyz
 
Normalisierung heißt das Zauberwort.

Was ich damit sagen will, ist dass du durch die schlechteste aller DB-Strukturen diese Probleme hast.
Wobei ich mich ernsthaft frage, warum, wenn schon keine Normalisierung, nicht alle Materialzahlen in einer Zeile stehen...?

Das Problem läßt sich nicht so einfach lösen. Du musst wohl oder übel die Tabelle so oft Joinen, wie du Materialien hast.
Du machst als erst ein select auf Mat1 und sammelst nur Werte <> NULL. Dies joinst du dann mit Mat2 ohne NULLs usw.

Also:
select art_bez a1, mat_1,menge_1 from xyz, (select art_bez2 a2, mat_2,menge_2 from xyz where mat_2 NOT NULL) [usw.] where mat_1 NOT NULL and a1=a2 and a1=a3 usw.

Ich hoffe, dass ist einigemaßen richtig so...is aus dem Kopf... ;)
Eine andere Lösung weiß ich jetzt nicht.

Besser wäre alledings, du würdest die Tabelle in eine vernünftige Form bringen. Thema Normalisierung @ wikipedia
 
Sehe ich auch so, das hier das DB Schema gröber im argen ist.

Was ich primär als Problem sehe, woher soll man / die Applikation, wissen, welche Daten denn nun zusammengehören, wenn es dafür keinen Identifier gibt?
 
@CHaos.Gentle:
Die Methode je Material ein join auszuführen funktioniert zwar prinzipiell,
allerdings sollte dies aufgrund des Datenvolumens/Performance vermieden werden.
Hatte deshalb auf eine existierende (aber mir noch unbekannte) Funktion für dieses Problem gehofft.
Trotzdem Danke. :)

@-=Renegade=-
-=Renegade=- schrieb:
Was ich primär als Problem sehe, woher soll man / die Applikation, wissen, welche Daten denn nun zusammengehören, wenn es dafür keinen Identifier gibt?
Gibt es doch, die Elemente des Attributs ArtBez.


@CHaos.Gentle und -=Renegade=-
Warum müssen eigentlich immer wieder von der Frage abweichende (besserwissende) Kommentare kommen? :freak:
Das die Daten nicht mindestens in der komfortablen 3ten Normalform vorliegen ist ja grad mein Problem... ;)
Welche Gründe es dafür gibt, soll jedoch nicht Thema sein.

Falls noch jemand einen Lösungsvorschlag haben sollte, wäre ich wirklich dankbar.
 
Zuletzt bearbeitet:
Bringt es dir evtl was in der Form?

Code:
ArtBez       Material    Menge
Objekt1      abc         5
Objekt1      efg         3
Objekt2      abc         3
Objekt2      efg         2

Das könntest du recht einfach über ein UNION ALL erreichen. Und falls du/ihr vorhabt die DB in Normalform zu bringen, wäre das ohnehin ratsam.
 
Ein einfaches Group by mit Max oder Min um an die Werte zu kommen funktioniert nicht?
 
@BerniG: Danke :)

Im Nachhinein fragt man sich oft, warum man nicht selbst darauf gekommen ist...
Die Lösung ist eben immer einfach wenn man Sie kennt :D

Hab als funktionierende Alternative mit der OLAP-Datenbank vom Analysis Server gearbeitet,
was nicht ganz so trivial (daher um so schlechter) war ... :eek:

knoxyz
 
Zuletzt bearbeitet:
Naja, das UNION ALL gibt nicht das Ergebnis, dass du gefordert hast. Und auf deine Frage, warum immer Besserwisserkommentare kommen: Weil diese Kommentare angebracht sind! Wenn man Fragen stellt die aufgrund eines Problems entstehen, welches der Fragende möglicherweise nicht überblickt, dann sollte dieser vielleicht darauf hingewiesen werden.
Außerdem habe ich ja nicht nur kluggeschissen, sondern dir auch einen Lösungsweg genannt.
 
Hallo CHaos.Gentle :)
CHaos.Gentle schrieb:
Naja, das UNION ALL gibt nicht das Ergebnis, dass du gefordert hast.
Stimmt, aber mit der von BerniG vorgeschlagenen Methode geht's super simpel und effektiv.

CHaos.Gentle schrieb:
Und auf deine Frage, warum immer Besserwisserkommentare kommen: Weil diese Kommentare angebracht sind! Wenn man Fragen stellt, die aufgrund eines Problems entstehen, welche der Fragende möglicherweise nicht überblickt, dann sollte dieser vielleicht darauf hingewiesen werden.
Ja, wenn. Bei dieser konkreten Problemstellung bestand jedoch kein Bedarf.
CHaos.Gentle schrieb:
Außerdem habe ich ja nicht nur kluggeschissen, sondern dir auch einen Lösungsweg genannt.
Und dafür haben ich mich auch bei dir bedankt. ;)

knoxyz
 

Ähnliche Themen

Zurück
Oben