MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > SQL
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 04.01.2018, 12:21   #1
mb-ing
Neuer Benutzer
Neuer Benutzer
Cool T-SQL : MSSQL 2008 - SQL Server 2008 R2: Falsch verlinkte Dokumente (Dok <=> Artikel) finden

Hallo zusammen,

ich erstelle des Öfteren einfachere SQL-Abfragen und stoße aktuell an meine Grenzen und würde mich deshalb sehr über Eure Hilfe freuen.
Die Forumssuche sowie Google habe ich bereits bemüht, wurde aber vermutlich aufgrund unpassender Suchbegriffe nicht fündig ...

Ziel meiner SQL-Abfrage ist es Dokumente aufzuspüren, die mit einem falschen Artikel verknüpft sind.

Alle betroffenen Tabellen weisen den uniquen Schlüßel "ID" auf, was den Datensatz eindeutig identifiziert.
Die Dokumente sind in der Tabelle "Documents" gelistet, welche eine Spalte "IDENT" besitzt.
Die Artikel sind in der Tabelle "Items" aufgeführt und es ist ebenfalls die Spalte "IDENT" vorhanden.
Die Verknüpfungen zwischen Dokumente und Artikel kann in der Tabelle "XREF_PARENT_DOCUMENT" gefunden werden. In dieser kann auch die Eigenschaft "WHERE X_RELATIONSHIP_ID ='XREF.DOC.ITEM' abgefragt werden.
Das Dokument ist stets als Parent und der Artikel als Child deklariert.

Folgende SQL-Abfrage liefert mir alle Dokumente, die mit dem selben Artikel 471112 verknüpft sind:

select IDENT
from DOCUMENTS
where ID in(
select X_PARENT_ID
from XREF_PARENT_DOCUMENT
where X_CHILD_ID in(
select ID
from ITEM
where IDENT = '471112'
and X_RELATIONSHIP_ID ='AIM.XREF.DOC.ITEM'))

Richtig verknüpfte Dokumente hätten z.B. folgende IDENT:
- 471112-1
- 471112-2
- 471112-3

Falsch verknüpfte Dokumente hätten z.B. folgende IDENT:
- 471112V0001-1
- 471112V0001-2
- 471112V0001-3

Die gewünschte Ergebnisliste sollte nur die Falsch verknüpften Dokumente ausgeben und natürlich unabhängig von einem Einzelartikel sein.

Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken und freue mich auf Eure Antworten.

Vielen Dank im Voraus für Eure Bemühungen.

Für weitere Fragen stehe ich Euch natürlich gerne zur Verfügung.

Viele Grüße
MB-Ing.
mb-ing ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 13:01   #2
hcscherzer
MOF Guru
MOF Guru
Standard

Moin und willkommen im Forum.

Zitat:

Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken

Also, ich muss gestehen, dass ich es noch nicht ganz kapiert habe, wie Deine Datenstruktur aufgebaut ist.
Und wie genau sich ein "falsch verknüpftes Dokument" definiert, hab ich auch noch nicht verstanden ...
Kannst Du mal einen Screenshot schicken, auf dem alle drei Tabellen mit Feldern und Beziehungen dargestellt sind?

Generell sind JOINS immer etwas performanter als Unterabfragen.
Deshalb würde ich obige Anweisung eher so formulieren:
Code:

select D.IDENT
from DOCUMENTS D
inner join XREF_PARENT_DOCUMENT P on D.ID = P.X_PARENT_ID
inner join ITEM I on P.X_CHILD_ID =I.ID
where I.IDENT = '471112' and I.X_RELATIONSHIP_ID ='AIM.XREF.DOC.ITEM'
Wie Du siehst, liest es sich besser, wenn der Code in Tags gepostet wird.

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.

Geändert von hcscherzer (04.01.2018 um 13:07 Uhr).
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 15:47   #3
mb-ing
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Hans-Christian,

vielen Dank für Deine Antwort.

Zitat:

Wie Du siehst, liest es sich besser, wenn der Code in Tags gepostet wird.

» Stimmt, danke für den Hinweise. Diese Funktion kannte ich bisher noch nicht.

Zitat:

Also, ich muss gestehen, dass ich es noch nicht ganz kapiert habe, wie Deine Datenstruktur aufgebaut ist.
Und wie genau sich ein "falsch verknüpftes Dokument" definiert, hab ich auch noch nicht verstanden ...
Kannst Du mal einen Screenshot schicken, auf dem alle drei Tabellen mit Feldern und Beziehungen dargestellt sind?

» Leider kann ich aktuell hiervon kein Screenshot machen.
Ich versuche es demnächst mal aufzuskizzieren.

Die DB verwaltet Konstruktionsdokumente und wird in absehbarer Zeit abgelöst.
Ich möchte nur vorab die "Datenqualität" im kleinen Rahmen analysieren.

In der DB gibt es Artikel, welche prinzipiell nur einen Datensatz umfassen und bildlich als Sammelmappe angesehen werden können.
Diese Artikel werden von dazugehörigen Konstruktionsdokumenten beschrieben.

Artikel:
IDENT = 471112
Dazugehörige Dokumente:
IDENT = 471112-1
IDENT = 471112-2
...

Jetzt gibt es von diesem Artikel auch die Variante 471112V0001.

Artikel:
IDENT = 471112V0001
Dazugehörige Dokumente:
IDENT = 471112V0001-1
IDENT = 471112V0001-2
...

Die IDENT kann man dem Namen eines Dokuments bzw. des Artikels gleichsetzen.
Die IDENT des Artikels wird durch ein externes System (ERP) vergeben.
Die IDENT der Dokumente können leider aktuell noch manuell vergeben werden...

Also, ich möchte eine Zeichnung zu dem Artikel 471112 anlegen, dann erhält diese manuell die IDENT 471112-1 (Zahl nach dem "-" fortlaufend, Doppelvergabe nicht möglich).

Die DB erkennt nun, dass es ein Dokument mit der IDENT 471112-1 gibt. Da für die DB der Bindestrich als Seperator fungiert, verknüpft er das Dokument autonom mit dem Artikel 471112.

Diese Dokument zu Artikel Verknüpfung ist korrekt.

Leider kam es in der Vergangenheit mal vor, dass das Dokument mit der IDENT = 471112V0001-1 fälschlicherweise mit dem Artikel mit der IDENT = 471112 verknüpft wurde.

Diese falsch verknüpften Dokumente würde ich gerne mittels SQL-Abfrage ermitteln

In VBA würde ich es tendenziell so machen:

- Gehe alle Datensätze der Tabelle Artikel durch
- Lese die IDENT und die ID aus
- Finde alle verknüpften Dokumente (CHILD_ID=ID (Artikel))
- Gehe alle verknüpften Dokumente durch
- Lese die IDENT als String aus und beschneide diese vor dem "-"-Seperator
- Vergleiche diesen String mit dem IDENT des Artikels
- Sind die beiden Strings nicht gleich, dann schreibe die vollständige IDENT des Dokuments in eine Liste

Leider weiß ich nicht, wie ich diese Gedanken in eine SQL-Abfrage tranformiere.

Vielen Dank im Voraus für Eure Hilfe.

Viele Grüße
MB-Ing
mb-ing ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 18:40   #4
hcscherzer
MOF Guru
MOF Guru
Standard

Zitat:

Leider kam es in der Vergangenheit mal vor, dass das Dokument mit der IDENT = 471112V0001-1 fälschlicherweise mit dem Artikel mit der IDENT = 471112 verknüpft wurde.

Wenn ich aber den bisherigen Ausführungen folge, dann ist der Artikel (ITEM) doch überhaupt nicht direkt mit dem Dokument verbunden sondern über die m:n Relation XREF_PARENT_DOCUMENT.
Wie schaut das denn im Falle eine "falschen" und wie bei einer "richtigen" Verknüpfung aus?

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 20:13   #5
mb-ing
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Hans-Christian,

vielen Dank für Deine Antwort.

Zitat:

Wenn ich aber den bisherigen Ausführungen folge, dann ist der Artikel (ITEM) doch überhaupt nicht direkt mit dem Dokument verbunden sondern über die m:n Relation XREF_PARENT_DOCUMENT.

» Vollkommenen richtig...

In der Tabelle "XREF_PARENT_DOCUMENT" sind diverse Datensätze mit einer einzigartigen ID.

Beispiel:
ID | X_PARENT_ID | X_CHILD_ID
-------------------------------------------
111|ID des Dokuments | ID des Artikels

Zwischen der Tabelle "Dokumente" und der Tabelle "Artikel" besteht keine direkte Beziehung bzw. man kann nicht aus beiden ermitteln in welcher Beziehung zwei Datensätze der jeweiligen Tabellen stehen.

Im Endeffekt beinhaltet die Tabelle "XREF_PARENT_DOCUMENT" eine Auflistung sämtlicher Beziehungen bzw. Verknüpfungen.
Hierbei kann natürlich jeder Artikel bzw. jedes Dokument mehrmals vorkommen, aber deren direkte Kombination nur einmal.
Zusätzlich steht der Artikel immer in der Spalte X_CHILD_ID und das Dokument in der Spalte X_PARENT_ID.

Vielen Dank und Grüße
MB-Ing.

Geändert von mb-ing (04.01.2018 um 20:15 Uhr).
mb-ing ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 23:17   #6
hcscherzer
MOF Guru
MOF Guru
Standard

XREF_PARENT_DOCUMENT ist eine klassische m:n Relation.
Das hatte ich ja bereits in #4 geschrieben.

Die Struktur hast Du in #5 beschrieben.
War so zu erwarten.
Code:

Beispiel:
ID  |  X_PARENT_ID     | X_CHILD_ID
-------------------------------------------
111 | ID des Dokuments | ID des Artikels
Klassischerweise baut man das, wenn es tatsächlich eine viele-zu-viele Abbildung gibt.
Wenn also mehrere Artikel Teile eines Dokuments sind; das ist ja wohl ganz sicher so.
Aber auch die selben Artikel in mehreren Dokumenten vorkommen können; ist das auch so?
Wenn letzteres nämlich nicht so wäre, dann würde eine 1:n Relation genügen, dann bräuchte man die XREF_PARENT_DOCUMENT nicht und könnte den Fremdschlüssel zum Dokument direkt in der Artikeltabelle speichern.

Ob nütz oder unnütz - jetzt ist es so, wie es ist und Du brauchst eine Anweisung, mit der Du die falsch verbundenen Datensätze auflistest.
Dazu hast Du aber bisher nicht genug Informationen preisgegeben.

Jetzt gibt es dort (in XREF_PARENT_DOCUMENT) also "richtige" und "falsche" Datensätze.
Woran sind die jeweils zu erkennen (fragte ich bereits)?

Schön wäre, wenn Du auch die Struktur von ITEM und DOCUMENT offenbaren könntest.
Und anhand vor praktischen beispielhaften Datensätzen mal zeigen würdest, was sind "Korrekte" und was nicht.

Wie soll man Dir helfen, wenn Du die Karten nicht auf den Tisch legst?

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.

Geändert von hcscherzer (04.01.2018 um 23:24 Uhr).
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 05.01.2018, 09:58   #7
mb-ing
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Frage

Hallo Hans-Christian,

vielen Dank für Deine Antwort und vor allem für Deine Geduld mit mir .

Zitat:

Aber auch die selben Artikel in mehreren Dokumenten vorkommen können; ist das auch so?

» Ja, dem ist so.

- Mehrere Dokumente können auf den selben Artikel zeigen
- Ein Dokument kann NUR auf ein Artikel verweisen
- Ein Artikel kann NICHT auf einen anderen Artikel verweisen
(Artikel ist immer das CHILD)
- Ein Dokument kann NICHT auf ein anderes Dokument zeigen
(Dokument ist immer das PARENT)

Die DB ist Ende der 80-er Jahre entstanden und damals wurde ohne Artikel gearbeitet.
Diese kamen erst später hinzu und wurden mittels der "XREF_PARENT_DOCUMENT"-Tabelle mit den Dokumenten nachträglich verknüpft.

Um in der Anfangszeit artikelbeschreibende Dokumente zu finden, wurde der Filter "beginnt mit" verwendet.
Bsp.:
Alle Dokumente zu dem Artikel 471112 finden:

» Filter für die Tabelle "Documents" = "beginnt mit": 471112

Als Ergebnis erhält man die Dokumente:
471112-1
471112-2
471112-3
471112-4

Zukünftig soll das Arbeiten mit Artikeln forciert werden.
Hierbei müssen natürlich die "Altlasten" besondere Beachtung finden, da diese nachträglich automatisch verknüpft wurden...

Eine falsche Verknüpfung wäre, wenn das Dokument 471112V0001-1 mit dem Artikel 471112 asoziiert ist.

Ich habe mal eine exemplarisch eine Excel-Mappe hinzugefügt, die den geschilderten Sachverhalt hoffentlich besser beschreibt. ^^

Hoffentlich konnte ich mein Anliegen und die dazugehörige Historie nun besser darlegen und freue mich auf Eure Tipps.

Danke und Grüße
MB-Ing
Angehängte Dateien
Dateityp: xlsx Bsp_SQL_Doc_XRef_Item.xlsx (11,6 KB, 3x aufgerufen)
mb-ing ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 05.01.2018, 16:59   #8
hcscherzer
MOF Guru
MOF Guru
Standard

Danke für die Beschreibung in der Excel-Tabelle.
Jetzt wird es klarer.

Ein wenig Redundanz ist allerding gegeben dadurch, dass die Artikelnummer auch im Feld DOCUMENTS.IDENT vorkommt. Andererseits ist nur dardurch die falsche Zuordnung ausfindig zu machen.

Folgende Query liefert alle Dokumente, die falsch zugeordnet sind:
Code:

select D.ID, D.IDENT, I.ID, i.IDENT
from DOCUMENTS D
inner join XREF_PARENT_DOCUMENT P on D.ID = P.X_PARENT_ID
inner join ITEM I on P.X_CHILD_ID = I.ID
where I.IDENT <> left(D.IDENT, charindex('-', D.IDENT) - 1)
Reparieren könntest Du es damit:
Code:

update XREF_PARENT_DOCUMENT P 
inner join DOCUMENTS D on D.ID = P.X_PARENT_ID
inner join ITEM I on P.X_CHILD_ID = I.ID
 set P.X_CHILD_ID =
  (select I1.ID from ITEMS I1 where I1.IDENT = left(D.IDENT, charindex('-', D.IDENT) - 1))
where I.IDENT <> left(D.IDENT, charindex('-', D.IDENT) - 1)

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 05.01.2018, 19:15   #9
mb-ing
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hi Hans-Christian,

merci beaucoup für Deine Antwort.

Zitat:

Danke für die Beschreibung in der Excel-Tabelle.
Jetzt wird es klarer.

» Wieso Danke?
Ich müsste mich wohl eher entschuldigen, dass ich es von Anfang nicht klarer beschreiben habe ....

Zitat:

Ein wenig Redundanz ist allerding gegeben dadurch, dass die Artikelnummer auch im Feld DOCUMENTS.IDENT vorkommt. Andererseits ist nur dardurch die falsche Zuordnung ausfindig zu machen.

» Wie meinst Du das?
Die Artikel-Nr. kommt doch nicht in der Tabelle "Documents" vor.
oder verstehe ich Dich falsch?

Ich denke, dass Dein Code funktioniert.
Vielen Dank für Deine Hilfe.

left(D.IDENT, charindex('-', D.IDENT) - 1)
» Diesen Teil muss ich noch verändern, da die IDENT des Dokumentes als Präfix eine zweistellige Länderkennung hat.
Also beispielsweise 01-471112-1.
Das bedeutet, dass ich den Teilstring zwischen den ersten beiden "-" der IDENT des Dokuments mit dem IDENT des Artikels vergleichen muss.

Dies geht vermutlich mit einer Verkettung von LEFT und Right oder?
Aber ich werde heute Abend noch mal Google dafür bemühen

Da die IDENT des Dokuments in den letzten ~30 Jahren manuell eingetragen wurde, kann nach dem zweiten "-" noch ein "-" kommen.
Aber der String zwischen den ersten beiden "-" ist Gott sei Dank immer richtig ^^

Wenn ich diese kleine Sache noch gelöst habe, gebe ich Dir Bescheid und werde den funktionierenden Code posten und das Thema als gelöst markieren.

Bis dahin nochmals vielen Dank für Deine Bemühungen.

Danke und Grüße
MB-Ing.
mb-ing ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 05.01.2018, 20:02   #10
hcscherzer
MOF Guru
MOF Guru
Standard

Du kannst charindex() mit einem dritten Parameter 'start_location' aufrufen und statt left() die Function substring() verwenden.
Die folgende Konstruktion liefert Dir alle Zeichen zwischen dem ersten und zweiten Bindestrich.
Code:

substring(D.IDENT, 
          charindex('-', D.IDENT) + 1,
          charindex('-', D.IDENT, charindex('-', D.IDENT) + 1) - charindex('-', D.IDENT) - 1)

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.

Geändert von hcscherzer (05.01.2018 um 20:06 Uhr).
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 05.01.2018, 21:16   #11
mb-ing
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Guten Abend Hans-Christian,

vielen Dank für Deine Antwort und vor allem für Deine Geduld mit mir . ^^

Eine Google-Suche mit den Suchbegriffen "sql get string between identical delimiters" hat mich zu folgenden Ergebnis geführt:

Code:

substring(D.IDENT,charindex('-',D.IDENT)+len('-'),
charindex('-',D.IDENT)-charindex('-',D.IDENT)-len('-'))
Leider ergibt dies die Fehlermeldung:
"Invalid length parameter passed to the LEFT or SUBSTRING function."

Zitat:

Code:

substring(D.IDENT, 
          charindex('-', D.IDENT) + 1,
          charindex('-', D.IDENT, charindex('-', D.IDENT) + 1) - charindex('-', D.IDENT) - 1)

» Habe ich ebenfalls ausprobiert und gibt mir ebenfalls den selben Fehler aus.
Fehlermeldung:
"Meldung 537, Ebene 16, Status 3, Zeile 1
Invalid length parameter passed to the LEFT or SUBSTRING function."

Mein aktueller Code:
Code:

select D.ID, D.IDENT, I.ID, i.IDENT
from DOCUMENTS D
inner join XREF_PARENT_DOCUMENT P on D.ID = P.X_PARENT_ID
inner join ITEM I on P.X_CHILD_ID = I.ID
where I.IDENT <> substring(D.IDENT, 
          charindex('-', D.IDENT) + 1,
          charindex('-', D.IDENT, charindex('-', D.IDENT) + 1) - charindex('-', D.IDENT) - 1)
Danke und Grüße
MB-Ing.
mb-ing ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 05.01.2018, 21:51   #12
mb-ing
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hmm komisch.....

Code:

Select substring('01-471112-1', charindex('-', '01-471112-1') + 1, charindex('-', '01-471112-1',
 charindex('-', '01-471112-1') + 1) - charindex('-', '01-471112-1') - 1) AS NewString
» Liefert eigentlich das gewünschte Ergebnis "471112"

Wieso bekomme ich dann den oben genannten Fehler?

Danke und Grüße
MB-Ing.
mb-ing ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 05.01.2018, 22:15   #13
mb-ing
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Ahhh......
Schande über mein Haupt
Es gibt anscheinend auch Datensätze in der Tabelle "Documents", welche beispielsweise die IDENT = "01-471112" aufweisen.
Also kein zweiten "-".

Muss ich vermutlich mit "Case" arbeiten....

Code:

(LEN(D.IDENT)-LEN(REPLACE(D.IDENT,'-','')))/LEN('-') >= 2
» Hiermit könnte ich überprüfen, ob der String mindestens zwei "-" enthält

Grüße
MB-Ing.

Geändert von mb-ing (06.01.2018 um 00:07 Uhr).
mb-ing ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.01.2018, 11:39   #14
mb-ing
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo zusammen,

mit den beiden folgenden Codes kann ich das erwünschte Ziel erreichen:

Code 1:
Code:

select I.IDENT as ArtNr, D.IDENT as DokNr, I.ID as Art_ID, D.ID as Dok_ID
from DOCUMENTS D
inner join XREF_PARENT_DOCUMENT P on D.ID = P.X_PARENT_ID
inner join PART I on P.X_CHILD_ID = I.ID
where (LEN(D.IDENT)-LEN(REPLACE(D.IDENT,'-','')))/LEN('-') >= 2
and I.IDENT <> substring(D.IDENT, charindex('-', D.IDENT) + 1,
charindex('-', D.IDENT, charindex('-', D.IDENT) + 1) - charindex('-', D.IDENT) - 1)
order by I.IDENT
Code 2:
Code:

select I.IDENT as ArtNr, D.IDENT as DokNr, I.ID as Art_ID, D.ID as Dok_ID
from DOCUMENTS D
inner join XREF_PARENT_DOCUMENT P on D.ID = P.X_PARENT_ID
inner join PART I on P.X_CHILD_ID = I.ID
where (LEN(D.IDENT)-LEN(REPLACE(D.IDENT,'-','')))/LEN('-') =1
and I.IDENT <> right(D.IDENT, len(D.IDENT) - 3)
order by I.IDENT
Jetzt muss ich nur noch etwas mit "CASE" integrieren dann sollte es insgesamt laufen
Aber das werde ich vermutlich nach dem sonnigen Wochenende erledigen.

Danke und Grüße
MB-Ing.
mb-ing ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 06.01.2018, 11:50   #15
hcscherzer
MOF Guru
MOF Guru
Standard

Mit replace() würde ich nicht arbeiten wollen ... das ist doch "von hinten durch die Brust ins Auge" ...
charindex() liefert 0 wenn die gesuchten Zeichen nicht enthalten sind
Für das dritte Argumen von substring (die Länge) setzt Du
Code:

case when charindex('-', D.IDENT, charindex('-', D.IDENT) + 1) = 0 
then
 len(D.IDENT) -  charindex('-', D.IDENT) 
else
 charindex('-', D.IDENT, charindex('-', D.IDENT) + 1) - charindex('-', D.IDENT) - 1
end

__________________

Freundlichen Gruß
Hans-Christian
-----------------------------------------
Oft erwünscht, selten beachtet: nach Erledigung des Problems den Thread als erledigt zu markieren
-----------------------------------------
Ich möchte nur Mitglied in einem Verein sein, der Leute wie mich nicht als Mitglied aufnimmt (Groucho Marx).
-----------------------------------------
Ab sofort regelmässig: MOF Stammtisch in Bremen. Näheres hier.
hcscherzer ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.