Problem bei der View

flosharok

Neuer Benutzer
Beiträge
4
Hallo zusammen,

ich habe aktuell ein sql statement problem und komme nicht weiter.

Ich habe eine Datenbankstruktur vorgegeben, die ich nicht ändern kann.
Nun muss ich mit einer View auf die Daten zugreifen.

Von der Tabellenstruktur sieht es folgendermaßen aus:
Tabelle Auftrag
ID
Bezeichnung
Typ ===> Intern / Extern
Gruppe_ID
. . . (weitere Werte)

Tabelle Gruppe
ID
. . .

Tabelle Bearbeitergruppe
ID
Gruppe_ID
BearbeiterID_Extern
BearbeiterID_Intern

Tabelle Bearbeiter
ID
Name

=========

Meine View habe ich aktuell so zusammengestellt:


select
a.bezeichnung as A_Bezeichnung,
Bextern.Name as Bearbeiter_Extern,
Bintern.Name as Bearbeiter_Intern,
BG.BearbeiterID_Extern as BearbeiterID_Ext,
BG.BearbeiterID_Intern as BearbeiterID_Int
FROM
Auftrag as A
left outer join Bearbeitergruppe as BG
on BG.Gruppe_ID = A.Gruppe_ID
left outer join Bearbeiter as Bextern
on BG.BearbeiterID_Extern = Bextern.ID
left outer join Bearbeiter as Bintern
on BG.BearbeiterID_Intern = Bintern.ID

=======
als Daten bekomme ich dann z.B. folgendes raus:

A_Bezeichnung | Bearbeiter_Extern | Bearbeiter_Intern | BearbeiterID_Ext | BearbeiterID_Int
Aufrag1 Hans Mueller Joseph Schuber 1 2
Auftrag1 Tim Schneider John Doe 3 4
Auftrag2 Hans Mueller John Doe 1 4
Auftrag3 Sepp Mair John Doe 5 4
Aufrag3 Sepp Mair Joseph Schuber 5 2

Was ich in meiner View noch nicht untergebracht habe ist die Unterscheidung des Auftragstyp.
Ich habe leider keine Ahnung wie ich es realisieren kann.

Ich möchte nämlich als Datensatz folgendes haben:


A_Bezeichnung | Bearbeiter_Extern | Bearbeiter_Intern | B_ID_Ext | B_ID_Int | A_Auftragtyp
Aufrag1 Hans Mueller Joseph Schuber 1 2 Intern
Auftrag1 Tim Schneider John Doe 3 4 Intern
Auftrag2 Hans Mueller John Doe 1 4 Intern
Auftrag3 Sepp Mair John Doe 5 4 Extern

Mit meiner View bekomme ich viele Datensätze, die exakt den gleichen Inhalt haben ausser die Kombination zwischen internen und externen Bearbeitern. Wobei dieser nur relevant ist, je nachdem welcher Auftragstyp eingetragen ist.
In diesem Beispiel ist der 2. "Auftrag3" Eintrag irrelevant, da er ebenfalls für Extern gilt, aber der Datensatz sich nur beim Internen_Bearbeiter sich unterscheidet.

Ich weiß nicht ob ich es mit meiner View realisieren kann.
Kann mir jemand bitte einen Tipp geben wie ich da weiterkommen kann.

Vielen Dank.

Gruß
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.690
Also den Auftragstyp mit anzuzeigen sollte sehr leicht sein, einfach a.Typ im SELECT mit abfragen:
Code:
select
a.bezeichnung as A_Bezeichnung,
Bextern.Name as Bearbeiter_Extern,
Bintern.Name as Bearbeiter_Intern,
BG.BearbeiterID_Extern as BearbeiterID_Ext,
BG.BearbeiterID_Intern as BearbeiterID_Int,
a.Typ
FROM
Auftrag as A
left outer join Bearbeitergruppe as BG
on BG.Gruppe_ID = A.Gruppe_ID
left outer join Bearbeiter as Bextern
on BG.BearbeiterID_Extern = Bextern.ID
left outer join Bearbeiter as Bintern
on BG.BearbeiterID_Intern = Bintern.ID

Der doppelte Interne Bearbeiter kommt durch deine Verschmelzung eines internen und eines externen Bearbeiters in eine Datensatzzeile. Gibt es jetzt 2 Interne Bearbeiter gibt es auch 2 Zeilen, wenn es auch noch 2 externe Bearbeiter gibt müssten es eigentlich schon 2*2=4 Zeilen werden. Wenn du nur eine Liste mit Bearbeitern zu jedem Auftrag haben willst, musst du die Abfrage eventuell anders aufbauen. Wie genau soll das Ergebniss denn aussehen?
 

flosharok

Neuer Benutzer
Beiträge
4
Hi,

hmm, jo ich will genau eine Liste mit Bearbeitern zu jedem Auftrag und das halt abhängig vom Typ. Also wenn der Auftragstyp "extern" ist und zum Auftrag aber eine Bearbeitergruppe mit einem Internen und Externen Bearbeiter vorhanden ist. Soll nur der für extern angezeigt werden.

Aktuell wird ja bei meiner View alles angezeigt.
 

ukulele

Datenbank-Guru
Beiträge
4.690
Okay du willst für jeden Auftrag genau einen Bearbeiter sehen. Wenn es Intern und Extern gibt soll nur Extern angezeigt werden. Wenn es aber mehrere Externe gibt, wie soll dann der anzuzeigende Datensatz gewählt werden?
 

flosharok

Neuer Benutzer
Beiträge
4
Jein.

Ich möchte für den Auftrag genau einen Bearbeiter sehen, jedoch ist es abhängig vom Feld Typ in der Tabelle Auftrag.
Wenn im Auftrag der Typ Extern eingetragen ist, soll der Datensatz nur für den Externen angezeigt werden, wenn es Intern ist, dann nur den für Intern.
 

ukulele

Datenbank-Guru
Beiträge
4.690
Nach einem Knoten im Kopf hab ich mal dashier geschaffen, k.a. ob es funktioniert:

Code:
SELECT    tbl.A_Bezeichnung,
        tbl.BearbeiterID,
        ba.Name,
        tbl.BearbeiterTyp
FROM    (    SELECT    a.bezeichnung AS A_Bezeichnung,
                    bg.BearbeiterID_Extern AS BearbeiterID,
                    'extern' AS BearbeiterTyp
            FROM    Auftrag a
            LEFT OUTER JOIN Bearbeitergruppe bg ON a.Gruppe_ID = bg.Gruppe_ID
            WHERE    bg.BearbeiterID_Extern IS NOT NULL
            UNION ALL
            SELECT    a.bezeichnung AS A_Bezeichnung,
                    bg.BearbeiterID_Intern AS BearbeiterID,
                    'intern' AS BearbeiterTyp
            FROM    Auftrag a
            LEFT OUTER JOIN Bearbeitergruppe bg ON a.Gruppe_ID = bg.Gruppe_ID
            WHERE    bg.BearbeiterID_Intern IS NOT NULL
            AND        bg.BearbeiterID_Intern IS NULL
            UNION ALL
            SELECT    a.bezeichnung AS A_Bezeichnung,
                    bg.BearbeiterID_Intern AS BearbeiterID,
                    'nicht vorhanden' AS BearbeiterTyp
            FROM    Auftrag a
            LEFT OUTER JOIN Bearbeitergruppe bg ON a.Gruppe_ID = bg.Gruppe_ID
            WHERE    bg.BearbeiterID_Intern IS NULL
            AND        bg.BearbeiterID_Intern IS NULL ) tbl
LEFT OUTER JOIN Bearbeiter ba ON tbl.BearbeiterID = ba.ID

Nein, das soll keine moderne Kunst sein.
 

flosharok

Neuer Benutzer
Beiträge
4
hi ukulele,

hat nicht ganz funktioniert aber das ist schon nah dran an dem was ich brauch.
Dank dir habe ich eine Idee / Ansatz wie ich da zu meiner Lösung kommen könnte.

Vielen Dank für deine Hilfe!
 
Werbung:
Oben