[MSSQL] Anzahl Datensätze aufgrund einer Spalte

rrobbyy

Mitglied
Hallo zusammen,

es besteht die Anforderung, dass Artikel-Etiketten über Word gedruckt werden sollen. Die MSSQL-Datenbank liefert die benötigten Datensätze. Das klappt auch alles soweit.

Bsp. Ein Kunde bestellt 10 Stk. Geräte. in der DB steht
Menge Einheit Beschreibung
10 Stk. Geräte

Darüber kann man wunderbar ein Etikett ausdrucken.


Jetzt gibt es aber eine weitere Anforderung, dass das Etikett so oft ausgedruckt wird, wie bestellt wurde, also in diesem Bsp. soll das Etikett 10x gedruckt werden.

Meine Idee ist, dass ich den select so erstelle, dass es mir auch 10 Datensätze pro Bestell-Artikel erzeugt, also eine Abhängigkeit schaffe zwischen Spalte Menge und den ausgeworfenen Datensätzen. Ich hab nur keine Idee, wie.

vorab Danke und Gruß
Robert
 
hallo, sorry für die lange Pause.
ich habe es bis jetzt noch nicht hinbekommen.
Aber folgende Idee:
könnte man nicht einen Cursor aufbauen, der alle Zeilen einliest und innerhalb des ersten Cursors einen weiteren erstellen, der so oft ein Insert in eine tmp-Tabelle macht, wie die Spalte Menge es vorgibt?
Leider scheitere ich derzeit an der Umsetzung.
 
ich sehe folgendes vorgehen in prosa:
1. cursor über die daten
2. Temporary Table (#tmp) order Table Variable (@tmp) für den zwischenspeicher, je nachdem
3. über den cursor loopen
4. menge in var i ablegen
5. while loop über i
6. im loop je ein instert in den tmp zwischenspeicher
7. im loop i um eins kleiner machen
8. fetch next
9. cursor schliessen
10. mit den daten in tmp kannst du nun machen was du willst...
 
supi. funktioniert: für alle, die es nachvollziehen wollen

Code:
--variablen deaklieren, entspricht den Spalten aus der Tabelle
declare @Rowvorgang as int
declare @Rowvorgangpos as int
declare @Artikel as varchar(255)
declare @Menge as decimal(15,2)
declare @Counter as int

--Deklaration des Cursors
declare c cursor 
for

--Inhalt des Cursors
select ROWVORGANG, ROWVORGANGPOS, ARTTEXT, MEBESTELLT from VORGPOS where ROWVORGANG = 58

--öfffnen
open c

FETCH next from c

--Variablen vom Cursor übergeben > Reihenfolge = select-Anweisung
into @Rowvorgang, @Rowvorgangpos, @Artikel, @Menge

while @@FETCH_STATUS = 0

begin
	
	set @Counter = 1
	--Menge ist gleich Anzahl der Durchläufe des Loops
		
	while @Counter <= @Menge
		begin
		--Was soll passieren?
		print @Artikel
		--Counter erhöhen, damit auch mal Schluss ist
		set @Counter = @Counter + 1
		end
	
	--Nächste Zeile aus dem Cursor abarbeiten
	fetch next from c
	into @Rowvorgang, @Rowvorgangpos, @Artikel, @Menge
end
	
--Schließen
close c
deallocate c
 
Zurück