USE [Vertragsverwaltung_20160404] GO /****** Object: StoredProcedure [dbo].[sp_rpt_fhrlst_Anzahl_neu] Script Date: 02.12.2016 09:08:53 ******/ DROP PROCEDURE [dbo].[sp_rpt_fhrlst_Anzahl_neu] GO /****** Object: StoredProcedure [dbo].[sp_rpt_fhrlst_Anzahl_neu] Script Date: 02.12.2016 09:08:55 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: -- Create date: -- Description: -- ============================================= CREATE PROCEDURE [dbo].[sp_rpt_fhrlst_Anzahl_neu] @von DATETIME = NULL , @bis DATETIME = NULL, @OEStruktur INT = NULL, @struktur_Ausschluss VARCHAR(255) = NULL, @Mitarbeiter_Ausschluss varchar(255)=null AS BEGIN IF @von IS NULL SET @von = convert(datetime,'01.01.2014',104) else set @von=CONVERT(datetime,@von,104) IF @bis IS NULL SET @bis = convert(datetime,'31.05.2014',104) else set @bis=CONVERT(datetime,@bis,104) IF @oestruktur IS NULL SET @oestruktur=24 IF @struktur_ausschluss IS NULL SET @struktur_ausschluss = '' if @mitarbeiter_ausschluss is null set @Mitarbeiter_Ausschluss='' DECLARE @save_von DATETIME DECLARE @save_bis datetime declare @dd1 varchar(2) declare @mm1 varchar(2) declare @yy1 varchar(4) declare @datum varchar(255) set @dd1=DAY(@von) set @mm1=MONTH(@von) set @yy1=YEAR(@von) if LEN(@dd1)<2 set @dd1='0'+@dd1 if LEN(@mm1)<2 set @mm1='0'+@mm1 set @datum=@yy1+'-'+@mm1+'-'+@dd1 +' 00:00:00' set @von=convert(datetime,@datum,20) set @dd1=DAY(@bis) set @mm1=MONTH(@bis) set @yy1=YEAR(@bis) if LEN(@dd1)<2 set @dd1='0'+@dd1 if LEN(@mm1)<2 set @mm1='0'+@mm1 set @datum=@yy1+'-'+@mm1+'-'+@dd1 +' 23:59:59' set @bis=convert(datetime,@datum,20) SET @save_von=@von SET @save_bis=@bis SET NOCOUNT ON; DECLARE @tmpa TABLE ( [TGNummer] [varchar](50) NULL , oenr INT , sortierung INT , START DATETIME , Ende DATETIME , [AU_offen] [INT] NOT NULL , [AU_Geschlossen] [INT] NOT NULL , [IN_Offen] [INT] NOT NULL , [IN_Geschlossen] [INT] NOT NULL , [IN_Langlaeufer] [INT] NOT NULL , [IN_Aufwand] [float] NOT NULL , [IN_GT_1PT] INT NOT NULL ) DECLARE @ansatz FLOAT SET @ansatz = 8.0 --IF @per IS NULL -- SET @per = GETDATE() --*************************************************************************** -- Relevante Mitarbeiter am Per-Datum --*************************************************************************** DECLARE @mnr INT DECLARE @rc INT DECLARE @mm INT DECLARE @yy INT --print @bis --print @von --SELECT manr -- FROM ma -- WHERE aktiv = 1 -- AND gueltig_bis >= @bis --return DECLARE xm CURSOR FOR SELECT @von AS von, @bis AS bis --select start_date, end_date -- FROM dbo.get_monatstabelle(@von, @bis) -- ORDER BY start_date OPEN xm FETCH NEXT FROM xm INTO @von, @bis WHILE @@FETCH_STATUS = 0 BEGIN --print @von --print @bis print 'Loop 1' print convert(varchar(24), getdate(),121) DECLARE xc CURSOR FOR SELECT manr FROM ma WHERE (aktiv = 1 AND gueltig_bis >= @bis or manr in (select manr from madetails where aktiv=1 and gueltig_ab >=@von)) and manr not in (select item from dbo.fnkt_split(@mitarbeiter_ausschluss,',',1)) OPEN xc FETCH NEXT FROM xc INTO @mnr WHILE @@FETCH_STATUS = 0 BEGIN SELECT @rc = COUNT(*) FROM dbo.MADetails WHERE manr = @mnr AND aktiv = 1 AND (Gueltig_ab <= @von or Gueltig_ab <=@bis) if @mnr = 71 print @rc IF @rc > 0 BEGIN INSERT @tmpa SELECT TOP 1 dbo.MA.TGNummer, madetails.OENr, ma.sortierung, @von, @bis, 0, 0, 0, 0, 0, 0.00, 0 FROM dbo.MA LEFT OUTER JOIN dbo.MADetails ON dbo.MA.MANr = dbo.MADetails.MANr WHERE dbo.MADetails.manr = @mnr AND dbo.MADetails.Aktiv = 1 AND (Gueltig_ab <= @von or Gueltig_ab <=@bis) AND madetails.oenr IN (SELECT id FROM dbo.fnkt_get_kpi_hierarchie(@oestruktur)) ORDER BY Gueltig_ab DESC END FETCH NEXT FROM xc INTO @mnr END CLOSE xc DEALLOCATE xc -- Geschlossene AU print 'Loop 2' print convert(varchar(24), getdate(),121) DECLARE @anzahl INT DECLARE @aufwand FLOAT DECLARE @ma VARCHAR(255) DECLARE xc CURSOR FOR SELECT TGNummer, COUNT(TicketId) AS Expr1 FROM dbo.TXP_AU_Geschlossen WHERE Status_Changedate BETWEEN @von AND @bis GROUP BY TGNummer OPEN xc FETCH NEXT FROM xc INTO @ma, @anzahl WHILE @@FETCH_STATUS = 0 BEGIN UPDATE @tmpa SET AU_Geschlossen = @anzahl WHERE tgnummer = @ma AND start = @von AND ende = @bis FETCH NEXT FROM xc INTO @ma, @anzahl END CLOSE xc DEALLOCATE xc ---- Offene AU print 'Loop 3' print convert(varchar(24), getdate(),121) DECLARE xc CURSOR FOR SELECT TGNummer, COUNT(TicketID) AS Expr1 FROM dbo.TXP_AU_Offen WHERE status_changedate < @bis AND ticketid NOT IN ( SELECT ticketid FROM dbo.TXP_AU_Geschlossen WHERE Status_Changedate BETWEEN @von AND @bis ) GROUP BY TGNummer OPEN xc FETCH NEXT FROM xc INTO @ma, @anzahl WHILE @@FETCH_STATUS = 0 BEGIN UPDATE @tmpa SET AU_offen = @anzahl WHERE tgnummer = @ma AND start = @von AND ende = @bis FETCH NEXT FROM xc INTO @ma, @anzahl END CLOSE xc DEALLOCATE xc -- Geschlossene IN print 'Loop 4' print convert(varchar(24), getdate(),121) DECLARE xc CURSOR FOR SELECT TGNummer, COUNT(TicketId) AS Expr1 FROM dbo.TXP_IN_Geschlossen WHERE convert(datetime,Status_Changedate,20) BETWEEN @von AND @bis GROUP BY TGNummer OPEN xc FETCH NEXT FROM xc INTO @ma, @anzahl WHILE @@FETCH_STATUS = 0 BEGIN UPDATE @tmpa SET IN_Geschlossen = @anzahl WHERE tgnummer = @ma AND start = @von AND ende = @bis FETCH NEXT FROM xc INTO @ma, @anzahl END CLOSE xc DEALLOCATE xc print 'Loop 5' print convert(varchar(24), getdate(),121) -- Offene IN DECLARE xc CURSOR FOR SELECT TGNummer, COUNT(TicketID) AS Expr1 FROM dbo.TXP_IN_Offen WHERE status_changedate < @save_bis and status_changedate > @save_von -- 2014-06-01 AND ticketid NOT IN ( SELECT ticketid FROM dbo.TXP_IN_Geschlossen WHERE Status_Changedate BETWEEN @save_von AND @save_bis ) GROUP BY TGNummer OPEN xc FETCH NEXT FROM xc INTO @ma, @anzahl WHILE @@FETCH_STATUS = 0 BEGIN UPDATE @tmpa SET IN_offen = @anzahl WHERE tgnummer = @ma AND start = @save_von FETCH NEXT FROM xc INTO @ma, @anzahl END CLOSE xc DEALLOCATE xc --Offene IN Langläufer print 'Loop 6' print convert(varchar(24), getdate(),121) DECLARE xc CURSOR FOR SELECT TGNummer, COUNT(TicketID) AS Expr1 FROM dbo.TXP_IN_Offene_Langlaeufer GROUP BY TGNummer OPEN xc FETCH NEXT FROM xc INTO @ma, @anzahl WHILE @@FETCH_STATUS = 0 BEGIN UPDATE @tmpa SET IN_Langlaeufer = @anzahl WHERE tgnummer = @ma AND start = @von AND ende = @bis FETCH NEXT FROM xc INTO @ma, @anzahl END CLOSE xc DEALLOCATE xc --Geschlossene IN Aufwand print 'Loop 7' print convert(varchar(24), getdate(),121) DECLARE xc CURSOR FOR SELECT TGNummer, COUNT(Ticket_ID) FROM dbo.TXP_IN_Geschlossen_IN_Aufwand WHERE status_changedate < @bis AND aufwand > @ansatz GROUP BY TGNummer OPEN xc FETCH NEXT FROM xc INTO @ma, @aufwand WHILE @@FETCH_STATUS = 0 BEGIN UPDATE @tmpa SET IN_gt_1pt = IN_GT_1PT + @aufwand WHERE tgnummer = @ma AND start = @von AND ende = @bis FETCH NEXT FROM xc INTO @ma, @aufwand END CLOSE xc DEALLOCATE xc -- Geschlossene IN Aufwand print 'Loop 8' print @von print @bis print convert(varchar(24), getdate(),121) DECLARE xc CURSOR FOR SELECT TGNummer, SUM(Aufwand) FROM dbo.TXP_IN_Geschlossen_Aufwand WHERE status_changedate < @bis and status_changedate > @von -- Von-Datum berücksichtigen 2014-05-06 GROUP BY TGNummer OPEN xc FETCH NEXT FROM xc INTO @ma, @aufwand WHILE @@FETCH_STATUS = 0 BEGIN UPDATE @tmpa SET IN_Aufwand = in_aufwand + @aufwand WHERE tgnummer = @ma AND start = @von AND ende = @bis FETCH NEXT FROM xc INTO @ma, @aufwand END CLOSE xc DEALLOCATE xc FETCH NEXT FROM xm INTO @von, @bis END CLOSE xm DEALLOCATE xm print 'Loop 9' print convert(varchar(24), getdate(),121) UPDATE @tmpa SET in_aufwand = in_aufwand --/ @ansatz -- 2014-06-01 - Distinct einbauen SELECT DISTINCT TOP ( 100 ) PERCENT dbo.OE.Bezeichnung AS OE, dbo.OE.Sortierung AS OESort, dbo.MA.Name, dbo.MA.Vorname, dbo.MA.Sortierung, a.TGNummer, a.START, a.ende, a.sortierung AS Expr1, a.AU_offen, a.AU_Geschlossen, a.IN_Offen, a.IN_Geschlossen, a.IN_Aufwand, a.IN_GT_1PT, a.in_Langlaeufer INTO #tmpfhr FROM @tmpa a INNER JOIN dbo.MA ON a.TGNummer = dbo.MA.TGNummer INNER JOIN dbo.OE ON a.oenr = dbo.OE.OeNr WHERE dbo.OE.oenr IN (SELECT id FROM dbo.fnkt_get_kpi_hierarchie(@oestruktur)) AND dbo.oe.oenr NOT IN ( SELECT item FROM dbo.fnkt_split(@struktur_Ausschluss, ',', 1) ) ORDER BY OESort, dbo.MA.Sortierung, dbo.MA.Name print 'Loop 10' print convert(varchar(24), getdate(),121) SELECT OE, OESort, Name, Vorname, Sortierung, TGNummer, Expr1 AS Sort, SUM(au_offen) AS au_offen, SUM(AU_Geschlossen) AS au_geschlossen, SUM(IN_Offen) AS in_offen, SUM(in_geschlossen) AS in_geschlossen, SUM(in_Aufwand) AS in_Aufwand, SUM(IN_GT_1PT) AS in_get_1pt, SUM(IN_Langlaeufer) AS IN_Langlaeufer INTO #tmpfhr1 FROM #tmpfhr GROUP BY OE, OESort, Name, Vorname, Sortierung, TGNummer, Expr1 print 'Loop 11' print convert(varchar(24), getdate(),121) SELECT * FROM #tmpfhr1 ORDER BY OESort, Sortierung, Name DROP TABLE #tmpfhr DROP TABLE #tmpfhr1 END GO