Daten 3fach durch eine Spalte mit unterschiedlichen werten

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

Benutzeravatar
MikeRo
****
Beiträge: 153
Registriert: Mi, 20.01.2010 10:16

Daten 3fach durch eine Spalte mit unterschiedlichen werten

Beitrag 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
Zuletzt geändert von MikeRo am Di, 12.04.2011 13:44, insgesamt 1-mal geändert.
OpenOffice 3.3 & postgresql-sdbc-driver 0.7.6b
Windows XP Professional SP3 x86
pmoegenb
********
Beiträge: 4330
Registriert: Di, 22.06.2004 12:02
Wohnort: 71134 Aidlingen
Kontaktdaten:

Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert

Beitrag von pmoegenb »

Weshalb sortierst Du die Datensätze ohne Prozentangaben in der WHERE-Klausel nicht einfach aus ?

Beispiel:

Code: Alles auswählen

and not Tabelle1.SpalteProz is Null
Gruß

Peter
---------------------------------------------------------------------------
Windows 7 Prof. 64-bit SP1, LibreOffice 4.3.6.2 und AOO 4.1.1
Benutzeravatar
MikeRo
****
Beiträge: 153
Registriert: Mi, 20.01.2010 10:16

Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert

Beitrag von MikeRo »

pmoegenb hat geschrieben:Weshalb sortierst Du die Datensätze ohne Prozentangaben in der WHERE-Klausel nicht einfach aus ?

Beispiel:

Code: Alles auswählen

and not Tabelle1.SpalteProz is Null
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... :/
OpenOffice 3.3 & postgresql-sdbc-driver 0.7.6b
Windows XP Professional SP3 x86
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert

Beitrag 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.
Benutzeravatar
MikeRo
****
Beiträge: 153
Registriert: Mi, 20.01.2010 10:16

Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert

Beitrag 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.
OpenOffice 3.3 & postgresql-sdbc-driver 0.7.6b
Windows XP Professional SP3 x86
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert

Beitrag von DPunch »

Aloha

Zeig mir mal bitte einen Screenshot, wie die Tabellen verknüpft sind, ich kann Dir da nicht ganz folgen.
Benutzeravatar
MikeRo
****
Beiträge: 153
Registriert: Mi, 20.01.2010 10:16

Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert

Beitrag 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
OpenOffice 3.3 & postgresql-sdbc-driver 0.7.6b
Windows XP Professional SP3 x86
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert

Beitrag 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.
Benutzeravatar
MikeRo
****
Beiträge: 153
Registriert: Mi, 20.01.2010 10:16

Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert

Beitrag 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)
Dateianhänge
Unbenannt.PNG
Unbenannt.PNG (24.58 KiB) 2950 mal betrachtet
OpenOffice 3.3 & postgresql-sdbc-driver 0.7.6b
Windows XP Professional SP3 x86
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert

Beitrag 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.
Benutzeravatar
MikeRo
****
Beiträge: 153
Registriert: Mi, 20.01.2010 10:16

Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert

Beitrag von MikeRo »

Vielen Dank, ich werde es mal versuchen.
OpenOffice 3.3 & postgresql-sdbc-driver 0.7.6b
Windows XP Professional SP3 x86
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert

Beitrag 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
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert

Beitrag von DPunch »

Aloha
F3K Total hat geschrieben:ich hätte da eine noch "holzhammerigere" Version anzubieten
Du tust es ja schon wieder 8)

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.
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert

Beitrag 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
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Daten 3fach durch eine Spalte mit unterschiedlichen wert

Beitrag 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.
Dateianhänge
Order_item.odb
(4.76 KiB) 103-mal heruntergeladen
Antworten