jazde86
Grünschnabel
Hallo,
ich möchte in einer Tabelle Artikel die mit aufsteigender Reversion sozusagen als Duplikate angelegt werden anpassen:
1. Folgeartikel bei älteren Reversionen eintragen.
2. Ältere Artikel sperren, nur den aktuellen aktiv lassen.
Artikelnummern bestehen aus 10 Zeichen und beginnen immer mit "ART". Die zehnte Stelle stellt die Reversion da, von 0 bis 9 - falls es welche gibt, z. B.
ART7893010
ART7893011
ART7893012
Was ich bereits habe und einwandfrei funktioniert ist folgendes:
1. Auflistung aller Artikelnummern, die nicht gesperrte Reversionen enthalten:
2. Alle älteren Reversionen einer einzelnen ArtikelNummer aktualisieren:
Wie kann ich nun die ArtikelNummer als Variable aus der ersten Abfrage einsetzen und wie den Code evtl. noch optimieren, so daß die Unterabfrage nicht mehrfach ausgeführt werden muß? Jede Zeile enthält auch eine UniqueID, aber die ist zufällig und lässt keine Rückschlüsse auf die neueste Reversion zu.
Danke schon mal für einige Denkanstöße oder Beispiele von Unterabfragen mit Variablen.
ich möchte in einer Tabelle Artikel die mit aufsteigender Reversion sozusagen als Duplikate angelegt werden anpassen:
1. Folgeartikel bei älteren Reversionen eintragen.
2. Ältere Artikel sperren, nur den aktuellen aktiv lassen.
Artikelnummern bestehen aus 10 Zeichen und beginnen immer mit "ART". Die zehnte Stelle stellt die Reversion da, von 0 bis 9 - falls es welche gibt, z. B.
ART7893010
ART7893011
ART7893012
Was ich bereits habe und einwandfrei funktioniert ist folgendes:
1. Auflistung aller Artikelnummern, die nicht gesperrte Reversionen enthalten:
SQL:
SELECT ArtikelNummer, Bezeichnung, FolgeArtikel, Verkaufssperre
FROM Artikel
WHERE EXISTS (
SELECT SUBSTRING(Artikel.ArtikelNummer, 0, 9), Bezeichnung, COUNT(*)
FROM Artikel Dup
WHERE ArtikelNummer LIKE 'ART%' AND SUBSTRING(Artikel.ArtikelNummer, 0, 9) = SUBSTRING(Dup.ArtikelNummer, 0, 9) AND Verkaufssperre != 1
GROUP BY SUBSTRING(ArtikelNummer, 0, 9), Bezeichnung
HAVING COUNT(*) > 1
)
ORDER BY ArtikelNummer;
2. Alle älteren Reversionen einer einzelnen ArtikelNummer aktualisieren:
SQL:
UPDATE Artikel
SET FolgeArtikel = (
SELECT TOP(1) ArtikelNummer
FROM Artikel
WHERE ArtikelNummer LIKE 'ART789301%' AND Verkaufssperre != 1
ORDER BY ArtikelNummer DESC
),
Verkaufssperre = 1
WHERE ArtikelNummer LIKE 'ART789301%' AND Verkaufssperre != 1
AND ArtikelNummer < (
SELECT TOP(1) ArtikelNummer
FROM Artikel
WHERE ArtikelNummer LIKE 'ART789301%' AND Verkaufssperre != 1
ORDER BY ArtikelNummer DESC
)
Wie kann ich nun die ArtikelNummer als Variable aus der ersten Abfrage einsetzen und wie den Code evtl. noch optimieren, so daß die Unterabfrage nicht mehrfach ausgeführt werden muß? Jede Zeile enthält auch eine UniqueID, aber die ist zufällig und lässt keine Rückschlüsse auf die neueste Reversion zu.
Danke schon mal für einige Denkanstöße oder Beispiele von Unterabfragen mit Variablen.