You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ITSM/.svn/pristine/0a/0a01c0c2e6b11f1ef2197f344c3...

94 lines
6.2 KiB

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: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <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