Seite 1 von 2
Daten 3fach durch eine Spalte mit unterschiedlichen werten
Verfasst: Mi, 06.04.2011 11:09
von MikeRo
Hallo,
ich habe ein Problem und komme leider nicht weiter. Ich habe eine Abfrage.:
Code: Alles auswählen
SELECT "offer_order_item"."surrdg_free" , "offer_discount_order_item"."percentage", "offer_order_item"."id" FROM "public"."offer_discount_order_item" AS "offer_discount_order_item", "public"."offer_order_item" AS "offer_order_item" WHERE "offer_discount_order_item"."order_item" = "offer_order_item"."id" AND "offer_order_item"."offer" = 8846 ORDER BY "offer_order_item"."id" ASC
Mit dieser Abfrage bekomme ich 14 Datensätze. Der Einzige Unterschied sind die Unterschiedlichen Prozente. denn es gibt nur 6 Bestellungen und nach und nach werden nur bestimmte Prozentwerte abgezogen. Ist es nicht möglich die Prozente als Spalten anzuhängen und dort wo keine Prozente, soll einfach nichts stehen. Denn dann hätte ich wirklich nur die echten 6 Datensätze.
*EDIT
Hier geht es weiter, mit genauerer Beschreibung des Problems
viewtopic.php?f=8&t=47837&p=174616#p174616
Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert
Verfasst: Mi, 06.04.2011 12:24
von pmoegenb
Weshalb sortierst Du die Datensätze ohne Prozentangaben in der
WHERE-Klausel nicht einfach aus ?
Beispiel:
Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert
Verfasst: Mi, 06.04.2011 12:34
von MikeRo
pmoegenb hat geschrieben:Weshalb sortierst Du die Datensätze ohne Prozentangaben in der
WHERE-Klausel nicht einfach aus ?
Beispiel:
Ich möchte folgende ausgabe haben
Tabelle a hat die Datensätze und Tabelle B hat die Prozente.:
Folgende Ausgabe habe ich.
|Angebot|Beschreibung|Prozente|
|101|Test1|15|
|101|Test2|15|
|101|Test2|16|
|101|Test2|60|
|101|Test3|16|
|101|Test4|15|
|101|Test4|60|
Und ich möchte
|Angebot|Beschreibung|Prozente15|Prozente16|Prozente60
|101|Test1|15|__|__|
|101|Test2|15|16|60|
|101|Test3|__|16|__|
|101|Test4|15|__|60|
Ich muss eine Büroanwendung schreiben, die Angebote automatisch erstellt und die Positionen in eine Excel Tabelle schreibt. Dann kommen noch neue Spalten hinten dran, in die Formeln kommen. Die Prozentwerte sind je Angebot variabel und mal gibt es bestimmte Prozente mal nicht und auch nicht zu jeder Position... :/
Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert
Verfasst: Mi, 06.04.2011 14:14
von DPunch
Aloha
MikeRo hat geschrieben:Die Prozentwerte sind je Angebot variabel und mal gibt es bestimmte Prozente mal nicht und auch nicht zu jeder Position...
Wenn es eine dymische Anzahl von Prozentwerten und auch noch völlig unterschiedliche Prozentwerte gibt, wirst Du diese Darstellung nicht vernünftig hinbekommen.
Eine feste Begrenzung auf 3 feste Prozentwerte wäre per Holzhammer-Methode noch halbwegs annehmlich umsetzbar, aber dynamische Spaltenzahlen - nur mit Makro.
Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert
Verfasst: Mi, 06.04.2011 14:26
von MikeRo
DPunch hat geschrieben:Aloha
MikeRo hat geschrieben:Die Prozentwerte sind je Angebot variabel und mal gibt es bestimmte Prozente mal nicht und auch nicht zu jeder Position...
Wenn es eine dymische Anzahl von Prozentwerten und auch noch völlig unterschiedliche Prozentwerte gibt, wirst Du diese Darstellung nicht vernünftig hinbekommen.
Eine feste Begrenzung auf 3 feste Prozentwerte wäre per Holzhammer-Methode noch halbwegs annehmlich umsetzbar, aber dynamische Spaltenzahlen - nur mit Makro.
Die Frage ist wie mache ich das am besten.
ich habe folgende Idee.
Die Positionen sind in einer Tabelle. mit einer bestimmten Positions-ID
Die Prozentwerte sind in einer Extratabelle welche über die Positions-ID mit der PositionenTabelle verbunden ist.
Ich habe bei der Ausgabe einfach mal alle IDs der Positionen in die Prozentspalten eingetragen.
(Die Spaltenüberschriften der Prozente werden aus der Prozentabelle gelesen und die entsprechenden Werte auch)
|Position|Prozent 15|Prozent16|......
Test 1|84|84
Test 2|85|85
Test 3|86|86
Somit müsste ich nach und nach die Spalten befüllen. erst die Spalte mit Prozent 15. Und dann eben nur an der stelle die werte eintragen, ab der auch Prozentwerte hingehören. in die anderen einfach eine Null. Weißt du wie ich das meine?
Nach der ersten Ausgabe. Habe ich die Tabelle erstellt und die Spalten mit den unterschiedlichen prozenten, egal wie viele es gibt oder nicht. das ist schon variabel drin. Aber wie bekomme ich jetzt an die richtigen stellen die werte. Ich kann ja eine Abrage machen. Welche nur die Positionen Anzeigt, die den Prozentwert der ersten Prozentspalte haben (15). Aber wie bekomme ich die einträge in die richtige spalte. Denn wenn es dort z.B. nur einen eintrag gibt kommt der direkt in die erste zeile. aber wenn er zu der ID 86 gehört muss er ja in die letzte. Es ist auch nicht garantiert, das die ID aufsteigend sortiert sind.
Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert
Verfasst: Mi, 06.04.2011 14:35
von DPunch
Aloha
Zeig mir mal bitte einen Screenshot, wie die Tabellen verknüpft sind, ich kann Dir da nicht ganz folgen.
Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert
Verfasst: Mi, 06.04.2011 15:03
von MikeRo
Das ist eine riesige Datenbank und ich greife nur auf teile zu.
Ich habe folgende Verknüpfungen.:
Tabelle OFFER -> OFFER-ID
-Verknüpft mit Positionen über OFFER-ID (Somit können pro offer mehrere Positionen existieren.)
Tabelle Positionen POSITIONEN-ID, OFFER-ID
-Verknüpft mit Rabatte über POSITIONEN-ID (Somit können mehrere unterschiedliche Rabatte pro Position existieren)
Tabelle Rabatte RABATT-ID, POSITIONEN-ID
Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert
Verfasst: Mi, 06.04.2011 18:24
von DPunch
Aloha
Das Reindenken in die Sache, ohne den prinzipiellen Aufbau zu kennen, ist mir ehrlich gesagt gerade zu anstrengend
Aber kannst Dich vielleicht hier mal umschauen:
PostgreSQL: tablefunc Stichwort crosstab.
Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert
Verfasst: Di, 12.04.2011 13:23
von MikeRo
Hallo DPunch,
hier hast du mal die Übersicht über die Tabellen die Nötig sind und die Abfrage die ich mache.
Dabei sind in der Tabelle offer_order_item die Einzelnen Positionen der bestellung
In der Tabelle offer_discount_order_item sind die Einzelnen Rabatte die auf die Positionen zutreffen.
Und die Tabelle offer_discount_item ist nur eine Kontrolltabelle und dort sind auch nur die verschiedenen Rabattarten zu finden Und Ihre Hierarchie.
Ich hoffe die Beziehungen sind nun besser verständlich und ersichtlich.
Hier die Abfrage als Code
Code: Alles auswählen
SELECT "offer_order_item"."id", "offer_discount_order_item"."percentage"
FROM "public"."offer_discount_order_item", "public"."offer_order_item", "public"."offer_discount_item"
WHERE "offer_discount_order_item"."order_item" = "offer_order_item"."id"
AND "offer_discount_order_item"."discount_item" = "offer_discount_item"."id"
AND "offer_order_item"."offer" = "offer_discount_item"."offer"
AND "offer_discount_item"."offer" = 8846
ORDER BY "offer_discount_item"."hierarchy" ASC, "offer_order_item"."id" ASC
Wie man sieht, sind die Positionen durch die verschiedenen Prozentwerte dreifach in der Ausgabe. Und diese CrossTab Funktion verstehe ich nicht so ganz.
(Ich greife über die Base postgresql auf deine postgresql Datenbank zu und teste die Abfragen in Base und schreibe diese danach in das Makro)
Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert
Verfasst: Di, 12.04.2011 17:27
von DPunch
Aloha
Wie schonmal erwähnt:
Mit 3 unterschiedlichen Prozenzwerten ist das per Holzhammer-Methode gar kein Problem, aber wenn Du unterschiedlichste Prozentwerte haben kannst, wird das nicht einfach so umsetzbar sein - das verlinkte "Crosstab" könnte Dir da behilflich sein, aber es ist zu lange her, dass ich mit PostgreSQL gearbeitet habe, als dass ich Dir da auf die Schnelle weiterhelfen könnte.
Die Darstellung Deiner 3 unterschiedlichen Werte per Holzhammer würde ungefähr so aussehen:
Code: Alles auswählen
SELECT DISTINCT
"id" ,
CASE "id" IN (SELECT "id" FROM "offer_discount_order_item" WHERE "percentage" = 15)
WHEN TRUE THEN '15'
ELSE ''
END AS "Prozent 15",
CASE "id" IN (SELECT "id" FROM "offer_discount_order_item" WHERE "percentage" = 30)
WHEN TRUE THEN '30'
ELSE ''
END AS "Prozent 30",
CASE "id" IN (SELECT "id" FROM "offer_discount_order_item" WHERE "percentage" = 62.1)
WHEN TRUE THEN '62,1'
ELSE ''
END AS "Prozent 62,1"
FROM "offer_discount_order_item"
Ich kann nur wiederholen, dass ich von diesem Herangehen nichts halte, aber wenn es hilft...
Ich weiss nicht, was genau Du damit machst, aber wenn Du eh mit Makros arbeitest, lässt sich das alles deutlich besser dort darstellen, bzw möglicherweise brauchst Du diese Darstellung gar nicht.
Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert
Verfasst: Di, 12.04.2011 17:50
von MikeRo
Vielen Dank, ich werde es mal versuchen.
Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert
Verfasst: Di, 12.04.2011 20:44
von F3K Total
Hallo,
ich hätte da eine noch "holzhammerigere" Version anzubieten, die bis zu 10 unterschiedliche Prozentwerte, die frei eingegeben werden können, findet und dann nach Vorkommen zuordnet. Schau mal in die View "P99_alle".
Gruß R
Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert
Verfasst: Mi, 13.04.2011 09:50
von DPunch
Aloha
F3K Total hat geschrieben:ich hätte da eine noch "holzhammerigere" Version anzubieten
Du tust es ja schon wieder
Diese Form der Darstellung kann man sowohl in HSQL als auch, deutlich weniger aufwändig, in PostgreSQL in einer einzigen Abfrage erzeugen, ohne reihenweise Views, ohne zusätzliche Tabelle und damit verbunden potenzielle Dateninkonsistenz, ohne eine dynamische Abfrage vorzugaukeln.
Du solltest wirklich von dieser Herangehensweise abrücken, es ist nur zu Deinem Besten. Zumindest aber solltest Du sie nicht anderen ans Herz legen.
Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert
Verfasst: Mi, 13.04.2011 11:47
von F3K Total
@DPunch
Ja, ich habe es schon wieder getan.
Eine zusätzliche Tabelle sehe ich nicht, habe lediglich die ganz oben angegebenen Tabellen verarbeitet.
Wenn es eine deutlich einfachere Lösung gibt, ohne die vielen "Einzelviews", kannst Du sie mal aufzeigen?
Natürlich bin ich an einer einfacheren "Holzhammermethode" sehr interessiert.
Gruß R
Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert
Verfasst: Mi, 13.04.2011 12:10
von DPunch
Aloha
F3K Total hat geschrieben:Eine zusätzliche Tabelle sehe ich nicht, habe lediglich die ganz oben angegebenen Tabellen verarbeitet.
Du hast Recht, mein Fehler - hatte nur einen kurzen Blick auf die odb geworfen und direkt wieder geschlossen, nachdem ich gesehen hatte, dass Du wieder mit Unmengen Views arbeiten willst.
Dachte, dabei auch eine zusätzliche Tabelle gesehen zu haben, nichts für ungut.
F3K Total hat geschrieben:Wenn es eine deutlich einfachere Lösung gibt, ohne die vielen "Einzelviews", kannst Du sie mal aufzeigen?
Siehe Anhang.
Und das ist die umständliche HSQL-Version (bzw. von der Syntax her SQL-"allgemeingültige" Version), per PostgreSQL und crosstab wäre das Ganze vermutlich nochmal deutlich simpler.
Ob Du mit Deinen X Views glücklich wirst, kannst alleine Du entscheiden, und da will ich Dir eigentlich nicht reinreden, aber Du solltest solche Lösungswege niemandem vorschlagen.