Jump to content

Expertenfrage - SQL Abfrage - Wer kann mir helfen?


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo liebe MCSE Board Community,

 

ich habe bei uns im Unternehmen ein großes Problem mit einer SQL Abfrage, die einem Export von einem PPS System zu einem Produktionsleitstand dienen soll.

 

Folgende Situation (ich versuche das mal möglichst allgemein gehalten zu skizieren):

 

Tabelle:

 

A B C D E F G

 

1 XY CD EF GH

2 XY FG HI JK

3 XY ER FG DF

4 AB ER QW OI

5 AB TU DJ JF

 

 

Ich versuche es mal zu erklären, wenn die Datensätze aus Spalte B die gleichen sind, dann muss die Information aus C2 in Feld F1 geschrieben werden (nicht unbedingt in den "echten DB-Tabel", die Ergebnissausgabe würde reichen) und die Information aus D3 in G1.

 

Genauso mit 4 - da B4 das gleiche ist wie B5 muss die Information aus C5 in F4 - einen weiteren Datensatz mit dem gleichen Wert gibt es nicht, also bleibt G4 leer.

 

Ich hoffe, die Systematik ist klar. Mein Problem ist momentan, das ich in der SQL Abfrage nicht einen konkreten Datensatz adressieren kann (ich kann nicht sagen "WENN XYZ von dem nächsten Datensatz auch GLEICH XYZ ist, dann nimm den Wert und schreibe sie in den VORHERIGEN Datensatz in SPALTE ABC)

 

Wer hat eine Lösung oder einen Ansatz - es wäre wirklich sehr sehr dringend!

 

Vielen Dank schon mal !

 

Heiner

Link zu diesem Kommentar

Hallo Heiner,

 

ich glaube, daß Du das mit vertretbarem Aufwand so nicht hinbekommen wirst.

Meine Vermutung geht eher dahin, daß Du dein Datenbank-Schema überdenken solltest.

 

Eine Gruppierung über eine (z.B. die erste) Spalte macht ja alles noch Sinn, aber Inhalte aus nachfolgenden Datensätzen sollten nichts mit dem gerade bearbeiteten Satz zutun haben.

 

Vielleicht hilft dem einen oder anderen hier eine genaue Definition des Problems, so daß man evtl. eine andere Lösung erarbeiten kann.

 

Sorry, daß ich jetzt nichts positiveres liefern kann.

 

Gruß

Andre

Link zu diesem Kommentar

... Dein Problem ist mit einem SQL-Statement nicht zu lösen, sondern nur in

"Skriptform". Da es sich bei Dir nur um eine Tabelle handelt, braucht man auch

nicht viel über DB-Schemata nachdenken.

 

Es sollte eine Spalte auf eine gewisse Wertigkeit geprüft werden und dann

bekommst Du ein RecordSet mit allen Records, die diesen Wert in der Spalte

haben und dann kannst Du die gelieferten Records bearbeiten.

 

Welche DB benutzt Du?

Welche Bilanz frisierst Du? ;) :D

 

Da es sich um sehr umfangreiche Operationen auf einer Tabelle handelt, sollte

diese sich nicht in einer DB befinden, die stark frequentiert wird, also ständig

mit neuen Daten gefüttert wird - dann bleiben Dir nur "Skripts", die Du als

Job um eine gewisse Uhrzeit ablaufen läßt und nicht als Trigger implementierst.

 

Gruß

Marco

Link zu diesem Kommentar

Hallo, danke erstmal für Eure Antworten!

 

Also hier geht es nicht um Bilanzen - hier geht es einfach nur um Maschinen in unserer Fertigung, welche wiederrum Formen benötigen und diese Formen benötigen wiederrum Einlegeteile.

 

Die Daten in der Tabelle sind Werkstattauftragspositionen, denen jeweils eine (Guss-) Maschine, eine Form (in die gegossen werden soll) und ein Einlegeteil (welches in diese Form kommt um z.B. einen Kern im Material zu bilden) zugeordnet wird.

 

Leider ist die Tabellenstruktur so, dass nun einer Maschine (1. Datensatz mit Auftragsnr. A1234) in der nächsten Zeile der Tabelle eine Form (2. Datensatz mit Auftragsnr. A1234)

und evtl. in der übernächsten Zeile ein Einlegeteil (3. Datensatz mit Auftragsnr. A1234) hinzukommt.

 

Alle drei Positionen tragen die gleiche Auftragsnummer. Sie unterscheiden sich nur in der Maschinenbezeichnung (z.B. 1.Datensatz 'Maschine', 2. Datensatz 'Form', 3. Datensatz 'Einlegeteil')

 

Nun muss ich aber in einer Zeile die Information haben, welche Maschine bei dem Auftrag mit der Nummer A1234 welche Form u. evtl welches Einlegeteil benötigt.

 

In einer Zeile deswegen, weil das Ergebniss dieses Querys in eine TXT Datei exportiert wird und von dem Produktionsleitstandssystem importiert wird.

 

Das diese DB Struktur für den Eimer ist, weiß ich auch - leider ist das die Struktur, die das PPS System verwendet. Somit bin ich daran leider gebunden. Es ist aber möglich (wenn das mir helfen könnte?!?) Spalten hinzuzufügen - so hatte ich schon an eine Lösung gedacht, bei der ich eine Spalte hinzufüge und z.B. ein "E" für Einlegeteil oder ein "F" für eine Form hereinschreiben lasse. Das sind dann ca. 500 händisch zu editierende Datensätze und somit noch machbar.

 

Dann könnte ich evtl eine Abfrage ähnlich dieser hier machen:

(mit * gekennzeichnete Stellen sind syntaktisch nicht korrekt, das sind die Stellen an denen ich nicht wüsste wie ich es in SQL Query Syntax formulieren muss)

 

-----------------------------

SELECT

aplanpos.aplan AS Auftragsnummer,

aplanpos.magr AS Maschinengruppe,

aplanpos.position AS Position,

(SELECT aplanpos.magr FROM aplanpos WHERE *Auftragsnummer = "geradezubearbeitender Datensatz* AND aplanpos.neuespalte ='E') AS Einlegeteil,

(SELECT aplanpos.magr FROM aplanpos WHERE *Auftragsnummer = "geradezubearbeitender Datensatz* AND aplanpos.neuespalte ='F') AS Form,

 

FROM aplanpos

----------------------------------------

 

Wie gesagt, was ich dort bräuchte wäre eine Art Variabel bei der ich die "gerade von der Query bearbeitete Auftragsnummer" als Indikator nehme und diese dann vergleiche mit den anderen in der Tabelle. Findet er diese erneut UND ist bei den gefundenen irgendwo in der neuen Spalte ein E oder eben ein F, so nimm den Datensatz "MAGR" aus dieser Zeile und füge ihn in die neue Spalte beim "ursprünglichen" Datensatz ein.

 

 

Ihr seht, es ist eine echte harte Nuss. Schuld an der Misere ist die bescheuerte Struktur innerhalb der Datenbank. Leider kann ich das PPS System nicht komplett auf den Kopf stellen. Wenn dazu jemand eine Lösung oder nur einen _Ansatz_ hätte, wäre ich sowas von unglaublich dankbar ;)

 

Der Schuh drückt da nämlich echt gewaltig! Vielen Dank schonmal an alle Denksportler!

 

Heiner

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...