USE [Vertragsverwaltung_20160404] GO /****** Object: UserDefinedFunction [dbo].[lc_rpt3] Script Date: 02.12.2016 09:08:53 ******/ DROP FUNCTION [dbo].[lc_rpt3] GO /****** Object: UserDefinedFunction [dbo].[lc_rpt3] Script Date: 02.12.2016 09:08:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: -- Create date: -- Description: -- ============================================= CREATE FUNCTION [dbo].[lc_rpt3] ( @produkte VARCHAR(255), @von varchar(255), @bis varchar(255), @produkttypnr int ) RETURNS @tmp1 TABLE (LC_Phasenr INT, Phase VARCHAR(255)) AS begin declare @tmp2 TABLE (LC_Phasenr INT, Phase VARCHAR(255), datum datetime) declare @tmp3 TABLE (LC_Phasenr INT, Phase VARCHAR(255)) IF @von='' SET @von='01.01.1900' IF @bis='' SET @bis='31.12.4712' IF @produkte='' BEGIN insert into @tmp2 SELECT DISTINCT dbo.LC_Phase.LC_PhaseNr, dbo.LC_Phase.Bezeichnung AS Phase, lc_produkt_phase.datum FROM dbo.LC_Produkt INNER JOIN dbo.LC_Produkt_Phase ON dbo.LC_Produkt.LC_ProduktNr = dbo.LC_Produkt_Phase.LC_ProduktNr INNER JOIN dbo.LC_Phase ON dbo.LC_Produkt_Phase.LC_PhaseNr = dbo.LC_Phase.LC_PhaseNr WHERE (dbo.LC_Phase.Aktiv = 1) AND (dbo.LC_Produkt_Phase.Aktiv = 1) AND (dbo.LC_Produkt.Aktiv = 1) AND (dbo.LC_Produkt.StatusNr = 1) AND dbo.LC_Produkt_Phase.Datum BETWEEN @von AND @bis AND (@produkttypnr=-1 OR @produkttypnr = lc_produkt.ProdukttypNr) ORDER BY lc_produkt_phase.datum END IF @produkte<>'' BEGIN insert into @tmp2 SELECT DISTINCT dbo.LC_Phase.LC_PhaseNr, dbo.LC_Phase.Bezeichnung AS Phase, lc_produkt_phase.datum FROM dbo.LC_Produkt INNER JOIN dbo.LC_Produkt_Phase ON dbo.LC_Produkt.LC_ProduktNr = dbo.LC_Produkt_Phase.LC_ProduktNr INNER JOIN dbo.LC_Phase ON dbo.LC_Produkt_Phase.LC_PhaseNr = dbo.LC_Phase.LC_PhaseNr WHERE (dbo.LC_Phase.Aktiv = 1) AND (dbo.LC_Produkt_Phase.Aktiv = 1) AND (dbo.LC_Produkt.Aktiv = 1) AND (dbo.LC_Produkt.StatusNr = 1) and dbo.lc_phase.lc_phasenr IN (SELECT item FROM dbo.fnkt_split(@produkte,',',1)) AND dbo.LC_Produkt_Phase.Datum BETWEEN @von AND @bis AND (@produkttypnr=-1 OR @produkttypnr = lc_produkt.ProdukttypNr) ORDER BY lc_produkt_phase.datum end INSERT @tmp3 SELECT TOP (100) PERCENT LC_Phasenr, Phase FROM @tmp2 GROUP BY LC_Phasenr, Phase ORDER BY MIN(datum) DECLARE @phase VARCHAR(255) DECLARE @i INT DECLARE @zwphase VARCHAR(255) SET @zwphase='' SET @i=0 DECLARE xc CURSOR FOR SELECT phase FROM @tmp3 OPEN xc FETCH NEXT FROM xc INTO @phase WHILE @@FETCH_STATUS=0 BEGIN IF @zwphase<>@phase BEGIN SET @i=@i+1 SET @zwphase=@phase END UPDATE @tmp3 SET phase=STR(@i)+' '+@phase WHERE phase=@phase FETCH NEXT FROM xc INTO @phase END CLOSE xc deallocate xc INSERT @tmp1 SELECT lc_phasenr, phase FROM @tmp3 RETURN end GO