USE [Vertragsverwaltung_20160404] GO /****** Object: StoredProcedure [dbo].[sp_rpt_fhrlst_Anzahl] Script Date: 02.12.2016 09:08:53 ******/ DROP PROCEDURE [dbo].[sp_rpt_fhrlst_Anzahl] GO /****** Object: StoredProcedure [dbo].[sp_rpt_fhrlst_Anzahl] 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] @von DATETIME = NULL , @bis DATETIME = NULL, @OEStruktur INT = NULL, @struktur_Ausschluss VARCHAR(255) = NULL AS BEGIN IF @von IS NULL SET @von = '01.03.2013' IF @bis IS NULL SET @bis = '26.07.2013' IF @oestruktur IS NULL SET @oestruktur=24 IF @struktur_ausschluss IS NULL SET @struktur_ausschluss = '' --DECLARE @per DATETIME = NULL , -- @von DATETIME = NULL , -- @bis DATETIME = NULL --SET @per = '01.03.2013' --SET @von = '01.03.2013' --SET @bis = '31.03.2013' DECLARE @save_von DATETIME DECLARE @save_bis datetime 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.5 --IF @per IS NULL -- SET @per = GETDATE() --*************************************************************************** -- Relevante Mitarbeiter am Per-Datum --*************************************************************************** DECLARE @mnr INT DECLARE @rc INT DECLARE @mm INT DECLARE @yy INT DECLARE xm CURSOR FOR SELECT * FROM dbo.get_monatstabelle(@von, @bis) ORDER BY start_date OPEN xm FETCH NEXT FROM xm INTO @von, @bis WHILE @@FETCH_STATUS = 0 BEGIN DECLARE xc CURSOR FOR SELECT manr FROM ma WHERE aktiv = 1 AND gueltig_bis >= @bis 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 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 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 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 DECLARE xc CURSOR FOR SELECT TGNummer, COUNT(TicketID) AS Expr1 FROM dbo.TXP_AU_Offen WHERE status_changedate BETWEEN @von AND @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 DECLARE xc CURSOR FOR SELECT TGNummer, COUNT(TicketId) AS Expr1 FROM dbo.TXP_IN_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 IN_Geschlossen = @anzahl WHERE tgnummer = @ma AND start = @von AND ende = @bis FETCH NEXT FROM xc INTO @ma, @anzahl END CLOSE xc DEALLOCATE xc -- Offene IN Langläufer 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 DECLARE xc CURSOR FOR SELECT TGNummer, COUNT(Ticket_ID) FROM dbo.TXP_IN_Geschlossen_IN_Aufwand WHERE status_changedate BETWEEN @von AND @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 DECLARE xc CURSOR FOR SELECT TGNummer, SUM(Aufwand) FROM dbo.TXP_IN_Geschlossen_Aufwand WHERE status_changedate BETWEEN @von AND @bis 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 ---- Offene IN -- DECLARE xc CURSOR -- FOR -- SELECT TGNummer, COUNT(TicketID) AS Expr1 -- FROM dbo.TXP_IN_Offen -- WHERE status_changedate BETWEEN @save_von AND @save_bis -- 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 UPDATE @tmpa SET in_aufwand = in_aufwand / @ansatz SELECT 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 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 SELECT * FROM #tmpfhr1 ORDER BY OESort, Sortierung, Name DROP TABLE #tmpfhr DROP TABLE #tmpfhr1 END GO