USE [Vertragsverwaltung_20160404] GO /****** Object: UserDefinedFunction [dbo].[lc_rpt6] Script Date: 02.12.2016 09:08:53 ******/ DROP FUNCTION [dbo].[lc_rpt6] GO /****** Object: UserDefinedFunction [dbo].[lc_rpt6] 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_rpt6] ( @produkte VARCHAR(255), @inTagen VARCHAR(255) ) RETURNS @tmp1 TABLE (LC_Produktnr INT, Produkt VARCHAR(255), LC_PhaseNr INT, datum DATETIME) AS begin DECLARE @von DATETIME DECLARE @it integer DECLARE @bis datetime SET @it=@intagen IF @intagen <> 0 BEGIN SET @von=DATEADD(DAY,@it,GETDATE()) SET @von=DATEADD(dd, DATEDIFF(dd, 0, @von), 0) END DECLARE @tmp2 TABLE (lc_Produktnr INT, Produkt VARCHAR(255), lc_phasenr INT, Phase VARCHAR(255), datum DATETIME, skey INT IDENTITY) DECLARE @tmp3 TABLE (lc_Produktnr INT, Produkt VARCHAR(255), lc_phasenr int, phase VARCHAR(255), datumvon DATETIME, datumbis DATETIME, diff INT, skey INT ) INSERT @tmp2 SELECT TOP (100) PERCENT dbo.LC_Produkt_Phase.LC_ProduktNr, dbo.lc_produkt.bezeichnung AS Produkt, dbo.LC_Produkt_Phase.LC_PhaseNr, dbo.LC_Phase.Bezeichnung AS Phase, dbo.LC_Produkt_Phase.Datum FROM dbo.LC_Produkt_Phase INNER JOIN dbo.LC_Produkt ON dbo.LC_Produkt_Phase.LC_ProduktNr = dbo.LC_Produkt.LC_ProduktNr INNER JOIN dbo.LC_Phase ON dbo.LC_Produkt_Phase.LC_PhaseNr = dbo.LC_Phase.LC_PhaseNr WHERE (dbo.LC_Produkt_Phase.Aktiv = 1) AND (dbo.LC_Produkt.Aktiv = 1) AND (dbo.LC_Produkt.StatusNr = 1) ORDER BY dbo.LC_Produkt_Phase.LC_ProduktNr, dbo.LC_Produkt_Phase.Datum DESC INSERT @tmp3 SELECT t1.lc_ProduktNr, t1.produkt, t1.lc_phasenr, t1.Phase , t1.datum AS DatumVon, x.datum AS DatumBis, ISNULL(DATEDIFF(DAY,t1.datum,x.datum),0) AS Diff, t1.skey FROM @tmp2 t1 OUTER APPLY ( SELECT TOP 1 datum FROM @tmp2 t2 WHERE t2.skey < t1.skey ORDER BY t2.skey desc) x ORDER BY lc_ProduktNr, t1.datum asc UPDATE @tmp3 SET diff=0 WHERE diff < 0 DELETE FROM @tmp3 WHERE diff=0 IF @produkte='' BEGIN insert into @tmp1 SELECT DISTINCT LC_Produktnr, Produkt, lc_phasenr, datumvon FROM @tmp3 WHERE @von BETWEEN datumvon AND datumbis ORDER BY Produkt end IF @produkte<>'' BEGIN insert into @tmp1 SELECT DISTINCT LC_Produktnr, Produkt, lc_phasenr, datumvon FROM @tmp3 WHERE @von BETWEEN datumvon AND datumbis AND lc_produktnr IN (SELECT item FROM dbo.fnkt_split(@produkte,',',1)) ORDER BY Produkt end RETURN end GO