Himitsu hat doch eigentlich den richtigen Ansatz schon gesagt.
Eine Function sollte das Problem relativ einfach beheben.
Ich habe mal was auf die Schnelle gebastelt:
Code:
CREATE FUNCTION dbo.f_SerNr (
)
RETURNS @Etiketten TABLE
(
SerNr varchar(10),
Typ varchar(10),
Status char(1),
Anzahl int
)
AS
BEGIN
declare
@SerNr varchar(10),
@SerNr_1 varchar(10),
@Typ varchar(10),
@Status char(1),
@Typ_1 varchar(10),
@Status_1 char(1),
@Anzahl int
declare SN_Cursor Cursor for
select *
from Ser_Nr
order by SerNr;
open SN_Cursor
fetch next from SN_Cursor
into @SerNr, @Typ, @Status
set @Anzahl = 1
while @@FETCH_STATUS = 0
begin
fetch next from SN_Cursor
into @SerNr_1, @Typ_1, @Status_1
if (@Typ = @Typ_1) and (@Status = @Status_1) and (@@FETCH_STATUS = 0)
BEGIN
set @Anzahl = @Anzahl + 1
end
else
begin
insert @Etiketten values (@SerNr, @Typ, @Status, @Anzahl)
set @SerNr = @SerNr_1
set @Typ = @Typ_1
set @Status = @Status_1
set @Anzahl = 1
end
end
close SN_Cursor;
DeAllocate SN_Cursor;
return
end
Ich habe das jetzt ohne Parameter gemacht. Daher fehlt im Cursor noch die Einschränkung auf den gewünschten Bereich.
Ich denke, dass die paar Ergänzungen aber kein Problem darstellen sollten.