SQL-Developer Report erstellung Frage (vermutlich an fortgeschrittene User)

tommy6969

Benutzer
Beiträge
7
Hallo erstmal an alle Mitglieder.

Ich bin neu hier und brauche dringend eure Hilfe. Ich befinde mich in einem Praktikum und muss einen Report erstellen, aus einer vorhandenen Datenbank. Eigentlioch ganz ok, aber ich blicke nur nicht richtig durch.

Ich besitze 8 Tabellen, aus denen ich bestimme Attribute benötige um einen Report zu erstellen.

Beispiel:
Tabellen: Kunde,Programm,Erloesgruppe,NetzProjekt,Planung,Vertrag,Status_Vertrag,Abrechnung

Benötigete
Attribute: Kunde = Name,
Programm=Programm_Name,
Erloesgruppe=Bezeichnung,
DBNetz_Projekte=Element,Bezeichnung,Vorschau,Prognose
Planung=VorschauWir
Vertrag=Nummer,BezeichnungVertrag,Jahreswert
Status_Vertrag=Status
Abrechnung= AbgerechnetMonat

Mit diesen Tabellen und Attributen(nicht alle aus den Tabellen genannt, sondern nur die nötigen) soll ich einen Report erstellen.

So wie ich es verstanden habe, hat kann jeder Kunde mehrere Programme besitzen und jedes "PROGRAMM"(Bsp: Finanz IT) mehrere "KUDNEN" haben.
Jedese "ERLOESGRUPPE"(Bezeichnung) (Bsp: IT Wartung) kann ebenfalls mehere Progammen angehören und ein einzelnes "Programm" kann ebenso mehrere "Bezeichnungen" haben.(Beispiel Programm Finanz IT= kann Erloesgruppenbezeichnung It Wartung und TK Projekte besitzen).
Aus der Tabelle "NETZ_PROJEKT" kommen die Attribute ELEMENT,BEZEICHNUNG,VORSCHAU,PROGNOSE. Diese vier Attribute müssen so angeordnet sein, dass sie in der entgültigen Tabelle dem Kunden->Programm->Erloesgruppe angehören. Dazu muss die PLANUNG mit dem Attribut VorschauWIR zu den anderen gesetzt werden.
Aus der Tabelle "Vertrag" mit den Attributen "NUMMER","BEZEICHNUNGVERTRAG","JAHRESWERT", müssen die Werte ebensop angepasst werden, dass sie,also ich vermute, mit dem Attribut "ELEMENT" aus der Tablle "NETZ_PROJEKT" gesetzt werden muss, damit die zusammensetzung stimmt.
Das Attribut "ABGERECHNETMONAT" aus der Tabelle Abrechnung sollte vermutlich in Beziehung mit der Tabelle Vertrag und dem Attribut "Nummer" gesetzt sein. Ich weiss nicht, ob diese Beschreibung hilft, würde jedoch jede Hilfe und jeden Tipp entgegenehmen. Ich besitze ebenso noch eine Zip datei, falls jmd lust und zeit hat, mir dabei zu helfen, sie ist zu groß, also müsstge sie per emailö schicken.

Hier nochmal die aktuellen ForeignKeys der Tabelle, die vermutlich noch geändert oder neue auch hinzugefügt werden müssen.

Kunde: Kein FK
Programm: Kein FK
Erloesgruppe:Kein FK
DBNetz_Projekte: Erloesgruppe,Kunde,Programm
Planung:Kunde,Programm,Erloesgruppe
Vertrag: Erloesgruppe,Kunde,Programm,Status_Vertrag
Status_Vertrag:Kein FK
Abrechnung:KEIN FK

Mein Aktueller, erbärmlicher sql Code:
SELECT K.K_Gesellschaft as Domäne,
E.E_TXT as Leistungssegment,
P.P_TXT as Programm,
D.NP_PSP_ELEMENT as PSPElement,
D.NP_BEZEICHNUNG as PSPBezeichnung,
D.NP_VORSCHAU_AKT_OLD as VorschauNetz,
PL.PL_PLANUMSATZ as VorschauDBPlus,
V.V_TXT as LVBezeichnung,
V.V_VERTRAGSWERT as LVJahreswert
FROM Kunde K, Erloesgruppe E, Programm P,DBNETZ_PROJEKTE D,Planung PL,Vertrag V
SO bekomme ich nur alle Attribute eingeballert so sollte es eigentlich aussehen.
In Klammern Tabellennahme:
Kunde(Kunde) Programm(Programm) Leistungssegment(Erloesgruppe) Element (Netz_Projekt) Bezeichnung(Netz_Projekt) Vorschau(Netz_Projekt) Prognose(Netz_Projekt) Vorschau(Planung) LV_Nummer(Vertrag) LV_Bezeichnung(Vertrag) Status(Status_Vertrag) Jahrewert(Vertrag) Abgerechnet(Abrechnung_CRM)

Das halt als Einen Report vorestellen indem die obene genannten Tabellen dann die attribute entahalten, die ich zusammensetzen soll.

So werde nun noch ein ER-Diagramm hochladen.... ich hoffe jmd kann mir helfen, wäre sehr dankbar.
 

Anhänge

  • ER-Diagramm.pdf
    19,3 KB · Aufrufe: 3
Werbung:
Hallo erstmal an alle Mitglieder.

Ich bin neu hier und brauche dringend eure Hilfe. Ich befinde mich in einem Praktikum und muss einen Report erstellen, aus einer vorhandenen Datenbank. Eigentlioch ganz ok, aber ich blicke nur nicht richtig durch.

Ich besitze 8 Tabellen, aus denen ich bestimme Attribute benötige um einen Report zu erstellen.

Wäre ich Du würde ich mit 2 Tabellen anfangen und auch saubere JOIN-Syntax nutzen. Du knallst alle Tabellen mit Komma zusammen und hast weder Join-Conditions noch Where-Conditions -> Du bekommst einen Cross Join, den Du sehr wahrscheinlich nicht willst.

Versuch also das Konzept eines Joins zu verstehen.

Es gibt hier übrigens auch Möglichkeiten, Code lesbar zu formatieren.
 
Danke für deine zügige Antwort.
Wie meinst du, dass ich mit 2 tabellen beginnen sollte und das mit Hilfe der join-syntax?`
Ich verstehe nur nicht das prinzip, wie ich den sql code schreiben soll, damit ich den Report erstellen kann, dass die Attribute auch passend zumsammengesetzt werden.

Und was meintest du, mit der möglichkeit hier einen Code lesbar zu formatieren ? sry bin neu hier ...wo muss ich denn den code einsetzen ?
 
Danke für deine zügige Antwort.
Wie meinst du, dass ich mit 2 tabellen beginnen sollte und das mit Hilfe der join-syntax?`
Ich verstehe nur nicht das prinzip, wie ich den sql code schreiben soll, damit ich den Report erstellen kann, dass die Attribute auch passend zumsammengesetzt werden.

Und was meintest du, mit der möglichkeit hier einen Code lesbar zu formatieren ? sry bin neu hier ...wo muss ich denn den code einsetzen ?

zu schnell geklickt ;-)

Du hast:

Code:
test=*# select * from kunde;
 id |  name
----+--------
  1 | kunde1
  2 | kunde2
(2 rows)

test=*# select * from auftrag ;
 id | kunde | typ |  datum
----+-------+-----+------------
  1 |  1 | a  | 2014-01-01
  2 |  1 | a  | 2014-02-01
  3 |  2 | b  | 2014-03-01
(3 rows)

Nun üben wir einen JOIN:

Code:
test=*# select k.name, a.datum from kunde k left join auftrag a on a.id=a.kunde;
  name  |  datum
--------+------------
 kunde1 | 2014-01-01
 kunde2 | 2014-01-01
(2 rows)

Ich verwende die BB-Codes. siehe Hilfe vom Forum.
 
Poa 1000 Danke:)...ich werde jetzt das mal ausprobieren, das heisst ich muss mit dem join-befehlen (left ,right etc) immer schritt fpr schritt die attribute aus dem Tabellen zusammensetzen, damit ich zuletzt aus allen 8 Tabellen die richtige anordnung habe ?
also verstehhe ich gerade so :)...ist es ok wenn ich dir bei weiteren fragen wieder schreibe?
1000 dank nochmal ....stehe wirklich unter druck :)

ps: damit der Join zwichen dem Kunden und auftrag funktioniertr müsste doch ein ForeignKey irgendwo in einen von beiden tabellen vorhanden sein oder da du ja schreibst
on a.id=a.kunde ?
 
Poa 1000 Danke:)...ich werde jetzt das mal ausprobieren, das heisst ich muss mit dem join-befehlen (left ,right etc) immer schritt fpr schritt die attribute aus dem Tabellen zusammensetzen, damit ich zuletzt aus allen 8 Tabellen die richtige anordnung habe ?
also verstehhe ich gerade so :)...ist es ok wenn ich dir bei weiteren fragen wieder schreibe?
1000 dank nochmal ....stehe wirklich unter druck :)

ps: damit der Join zwichen dem Kunden und auftrag funktioniertr müsste doch ein ForeignKey irgendwo in einen von beiden tabellen vorhanden sein oder da du ja schreibst
on a.id=a.kunde ?

Ja, die Tabellen sind so angelegt:

Code:
test=*# \d kunde
  Table "public.kunde"
 Column |  Type  | Modifiers
--------+---------+-----------
 id  | integer | not null
 name  | text  |
Indexes:
  "kunde_pkey" PRIMARY KEY, btree (id)
Referenced by:
  TABLE "auftrag" CONSTRAINT "auftrag_kunde_fkey" FOREIGN KEY (kunde) REFERENCES kunde(id)

test=*# \d auftrag
  Table "public.auftrag"
 Column |  Type  | Modifiers
--------+-------------------+-----------
 id  | integer  | not null
 kunde  | integer  |
 typ  | character varying |
 datum  | date  |
Indexes:
  "auftrag_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
  "auftrag_kunde_fkey" FOREIGN KEY (kunde) REFERENCES kunde(id)
Referenced by:
  TABLE "a_details" CONSTRAINT "a_details_a_id_fkey" FOREIGN KEY (a_id) REFERENCES auftrag(id)
 
Also wie du das mit dem Code-Abschnitt hinbekommen hast immernoch für micht nicht erklärbar :)...
Nun also das ist der Code für die ersten 2 tabellen
Code:

select K.K_Gesellschaft, P.P_TXT
from Kunde K left join Programm P on P.P_ID=P.K_Gesellschaft
/* Foreign Key Beziehung notwendig */

K_Gesellschaft der name für das Attribut aus Kunde, ud P_TXT der name für das Programm.
Nun verwirrt mich der letze abschnitt ".P_ID=P.K_Gesellschaft"...funktioniert das so:
oder müsste ich am ende die ID's vergleichen, also die Keys.
Würde dann so aussehen P.P_ID = K.K_ID---> heisst also zeige aus dem zwei tabellen an, an der Programm und Gesellschaft zusammengehören, bei der P.P_ID = K._K_ID gleich sind.
Ist der gedankengang richtig ? Danke
 
hat jmd noch ideen ?

Ideen für was? Code-Formatierung? Findest Du hier: https://www.datenbankforum.com/help/bb-codes

Oder für, Zitat:

Code:
select K.K_Gesellschaft, P.P_TXT
from Kunde K left join Programm P on P.P_ID=P.K_Gesellschaft
/* Foreign Key Beziehung notwendig */
[code]
...
[code]
Ist der gedankengang richtig ? Danke

Wenn die FK-Beziehung so korrekt ist, dann ist auch Dein Gedankengang richtig. Geprüft habe ich das jetzt nicht weiter.
 
Werbung:
DAnke für deine Antwwort, das Problem ist, dass es 8 Tabellen sind, aus denen ich bestimmte Attribute zusammensetzen muss und ich weiss nicht, wie ich das gestalte.

Code:
SELECT k.K_Gesellschaft AS Domöne,
pl.PL_PLANUMSATZ AS vorschau_DB_Systel,
e.E_TXT AS Leistungssegment,
p.P_TXT AS PROGRAMM

FROM (kunde k INNER JOIN planung pl
	ON pl.K_ID = k.K_ID) INNER JOIN erloesgruppe e
	ON pl.E_ID = e.E_ID INNER JOIN programm p
  ON pl.P_ID = p.P_ID
  ,(select db.NP_PSP_ELEMENT,db.NP_BEZEICHNUNG,db.NP_VORSCHAU_AKT_OLD,e.E_TXT,
  k.K_Gesellschaft,p.P_TXT
  FROM DBNETZ_PROJEKTE db, erloesgruppe e,kunde k, programm p
  where db.K_ID = k.K_ID and
  db.E_ID = e.E_ID and
  db.P_ID = p.P_ID
  );
 
Zurück
Oben