none
eine Variable mit verschiedenen Werten in einem SQL-Skript RRS feed

  • Frage

  • Hallo zusammen,

    ich sollte aus einer Tabelle mit einzelnen Datensätzen folgende Werte berechnen:

    Monat, Team, Anzahl Datensätze pro Monat, Durchschnittliche Anzahl der Datensätze pro Mitarbeiter und Monat

    mit folgendem SQL Skript habe ich das bis dato realisiert.

    Declare @Ticketuebersicht_komplett as Table(Erstellt_am datetime, Team nvarchar(50), Mitarbeiter nvarchar(50));
    
    insert into @Ticketuebersicht_komplett(Team, Mitarbeiter, Erstellt_am)
    select Team, Besitzer, Erstellt_am from Ticketuebersicht_komplett
    where Erstellt_am >= '2014-01-09' and Erstellt_am < '2014-01-10';
    
    With Vorbereitung as
    (
    SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, Erstellt_am), 0) as Monat,  Team, Mitarbeiter
     FROM @Ticketuebersicht_komplett
    )
    Select Monat, Team, count(distinct Mitarbeiter) as Mitarbeiter_Monat, count(*) as Call_Anzahl, count(*) * 1.0 / count(distinct Mitarbeiter) as Team_Durchschnitt_Monat, DATEPART(MONTH,Monat) as 'datenumber', DATENAME(MONTH,Monat) AS 'Monatname', DATEPART(YEAR, Monat) as 'Jahr'
    from Vorbereitung
    group by DATEPART(YEAR, Monat), Monat, Team
    order by DATEPART(YEAR, Monat), Monat, Team;

    Leider ist es nun so, dass die Anzahl der Besitzer nicht mehr mit der Anzahl Mitarbeiter übereinstimmt.

    Also sollte ich diese Anzahl durch eine Variable ersetzen. diese sollte sich aber pro Team unterscheiden.

    Hat jemand eine Idee?

    Danke und Gruß

    Timo

    Mittwoch, 1. Oktober 2014 06:54

Antworten

  • Halllo TimoB_,
    wo wird die Information über die Anzahl der Mitarbeiter pro Team gespeichert, damit man schlußfolgern kann, ob sie für das jeweilige Team von der Anzahl der Besitzer abweicht? Für den Fall, dass sie in einer anderen Tabelle (z. B. namens Teamtabelle) mit drei Spalten enthalten ist (Team, Besitzer, Mitarbeiter, oder gar zwei Spalten: Team und Mitarbeiter), könnte man einen Inner Join unternehmen:

    SELECT Ticketuebersicht_komplett.Team AS Team, Mitarbeiter, Erstellt_am FROM Ticketuebersicht_komplett
    INNER JOIN Teamtabelle
    ON Ticketuebersicht_komplett.Team = Teamtabelle.Team
    WHERE Erstellt_am >= '2014-01-09' and Erstellt_am < '2014-01-10';

    Gibt es tatsächlich eine zusätzliche Tabelle für die Mitarbeiter?

    Grüße, Dimitar



    Mittwoch, 1. Oktober 2014 08:58
    Moderator
  • Habs selbst hinbekommen:

    Declare @Ticketuebersicht_komplett as Table(Erstellt_am datetime, Team nvarchar(50), Mitarbeiter nvarchar(50));
    
    declare @Anzahl_MA int;
    set @Anzahl_MA = 5;
    
    
    insert into @Ticketuebersicht_komplett(Team, Mitarbeiter, Erstellt_am)
    select Team, Besitzer, Erstellt_am from Ticketuebersicht_komplett
    where Erstellt_am >= '2014-01-09' and Erstellt_am < '2014-01-10';
    
    
    
    With Vorbereitung as
    (
    SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, Erstellt_am), 0) as Monat,  Team, Mitarbeiter, Anzahl_MA = 
    case 
    	when Team = 'PS_Industry_Software' then 6
    	when Team = 'PS_Industry_Labelling' then 8
    	when Team = 'PS_Industry_Scales' then 3
    	when Team = 'PS_Industry_CIG' then 7
    	when Team = 'PS_Food' then 3
    	when Team = 'PS_Retail' then 11
    	else 1
    end
     FROM @Ticketuebersicht_komplett
    )
    
    Select Monat, Team, Anzahl_MA, count(*) as Call_Anzahl, (count(*) * 1.0 / Anzahl_MA), DATEPART(MONTH,Monat) as 'datenumber', DATENAME(MONTH,Monat) AS 'Monatname', DATEPART(YEAR, Monat) as 'Jahr'
    from Vorbereitung
    group by DATEPART(YEAR, Monat), Monat, Team, Anzahl_MA
    order by DATEPART(YEAR, Monat), Monat, Team;
    
    

    • Als Antwort markiert TimoB_ Mittwoch, 1. Oktober 2014 09:04
    Mittwoch, 1. Oktober 2014 09:04

Alle Antworten

  • Halllo TimoB_,
    wo wird die Information über die Anzahl der Mitarbeiter pro Team gespeichert, damit man schlußfolgern kann, ob sie für das jeweilige Team von der Anzahl der Besitzer abweicht? Für den Fall, dass sie in einer anderen Tabelle (z. B. namens Teamtabelle) mit drei Spalten enthalten ist (Team, Besitzer, Mitarbeiter, oder gar zwei Spalten: Team und Mitarbeiter), könnte man einen Inner Join unternehmen:

    SELECT Ticketuebersicht_komplett.Team AS Team, Mitarbeiter, Erstellt_am FROM Ticketuebersicht_komplett
    INNER JOIN Teamtabelle
    ON Ticketuebersicht_komplett.Team = Teamtabelle.Team
    WHERE Erstellt_am >= '2014-01-09' and Erstellt_am < '2014-01-10';

    Gibt es tatsächlich eine zusätzliche Tabelle für die Mitarbeiter?

    Grüße, Dimitar



    Mittwoch, 1. Oktober 2014 08:58
    Moderator
  • Habs selbst hinbekommen:

    Declare @Ticketuebersicht_komplett as Table(Erstellt_am datetime, Team nvarchar(50), Mitarbeiter nvarchar(50));
    
    declare @Anzahl_MA int;
    set @Anzahl_MA = 5;
    
    
    insert into @Ticketuebersicht_komplett(Team, Mitarbeiter, Erstellt_am)
    select Team, Besitzer, Erstellt_am from Ticketuebersicht_komplett
    where Erstellt_am >= '2014-01-09' and Erstellt_am < '2014-01-10';
    
    
    
    With Vorbereitung as
    (
    SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, Erstellt_am), 0) as Monat,  Team, Mitarbeiter, Anzahl_MA = 
    case 
    	when Team = 'PS_Industry_Software' then 6
    	when Team = 'PS_Industry_Labelling' then 8
    	when Team = 'PS_Industry_Scales' then 3
    	when Team = 'PS_Industry_CIG' then 7
    	when Team = 'PS_Food' then 3
    	when Team = 'PS_Retail' then 11
    	else 1
    end
     FROM @Ticketuebersicht_komplett
    )
    
    Select Monat, Team, Anzahl_MA, count(*) as Call_Anzahl, (count(*) * 1.0 / Anzahl_MA), DATEPART(MONTH,Monat) as 'datenumber', DATENAME(MONTH,Monat) AS 'Monatname', DATEPART(YEAR, Monat) as 'Jahr'
    from Vorbereitung
    group by DATEPART(YEAR, Monat), Monat, Team, Anzahl_MA
    order by DATEPART(YEAR, Monat), Monat, Team;
    
    

    • Als Antwort markiert TimoB_ Mittwoch, 1. Oktober 2014 09:04
    Mittwoch, 1. Oktober 2014 09:04
  • Dann kann man nur hoffen, dass es bei Euch keine Fluktuation gibt.

    Die Lösung von Dimitar finde ich da eleganter.

    Einen schönen Tag noch,
    Christoph
    --
    Microsoft SQL Server MVP - http://www.insidesql.org/blogs/cmu

    Donnerstag, 2. Oktober 2014 05:59
    Beantworter