Drei Tabellen in eine einfügen und Duplikate vermeiden

Naja, wir wollen es ja mal nicht übertreiben *hust*jetzt schon leicht überfordert*

Warum steht bei dir Select und nicht Create View? Kann man dass so und so machen?
 
Werbung:
Übrigens: die Buchstabenfolgen direkt hinter den Tabellennamen in der Abfrage sind Aliase für die Tabellen.
Das erleichtert die Abfrage von Spalten der einzelnen Tabellen. Mit dem Alias R für Rechnungen wird dann aus dbo.Rechnung.Rechnungsnummer einfach R.Rechnungsnummer.
 
Ein Select kann man immer ganz einfach in eine View speichern, indem man folgende Syntax nutzt:
Code:
CREATE VIEW dbo.wv_ViewName
AS
SELECT ...
 
So, ich schätze ich hab es geschafft die Create richtig umzuschreiben, jetzt muss ich nur noch die Fill umschreiben und die Abfragen machen :)
Ich hoffe, dass klappt
 
Ja, das alte Problem wieder in Warenkorb nur diesmal ohne Preis_ID.

Ich hab es jetzt so probiert, aber wieder Duplikate bekommen:


Code:
insert into Warenkorb (Rechnungsnummer, Artikel_ID)
select Rechnungsnummer, Artikel_ID
from dbo.Rechnung R
INNER JOIN dbo.Artikel A
        ON A.Artikel_ID=W.Artikel_ID;
 
Habe ich richtig verstanden, dass du eigentlich für jede Rechnung nur einen Artikel benötigst?
Am Einfachsten programmierst du dann eine WHILE-Schleife, in der du jede Rechnungsnummer durchläufst und dann im Warenkorb den Artikel angibst:

Code:
DECLARE cur CURSOR FOR
SELECT Rechnung_ID FROM dbo.Rechnung
 
DECLARE @I int, @RID int
 
OPEN cur
 
FETCH NEXT FROM cur
INTO @RID
 
SET @I=1
 
WHILE @@FETCH_STATUS=0
BEGIN
          INSERT INTO @Warenkorb (Rechnung_ID, Artikel_ID) VALUES (@RID, @I)
 
          SET @I=@I+1
          IF @I>10 SET @I=1 -- maximal 10 Artikel im der Artikel-Liste mit fortlaufender ID von 1 bis 10
 
          FETCH NEXT FROM cur
          INTO @RID 
END
 
CLOSE cur
DEALLOCATE cur

Das ist natürlich nur ein Beispiel. Die Daten für Rechnung und Artikel müssen dann vorhanden sein.
 
Werbung:
Zurück
Oben