2016-04-14 16 views
1

Ich möchte nur diese Warnung erstellen, wenn alle Mitarbeiter täglich Stunden unter 6,00 fallen, derzeit ist mein Code alle Stunden aller Mitarbeiter Auszählung, wie die Warnung nur für jedenAlert Wird auf IF-Anweisung basierend auf Summe nach Gruppe?

Mitarbeiter schaffen
declare @totalhrs int 
SELECT @totalhrs = SUM(duration) 
FROM pl00.DBO.schedule 
where (schedule.DATE = CONVERT(char(10), getdate()+2, 121) 
and schedule.TYPE <> 'z') 
group by EMP_ID, schedule.DATE 

    if(@totalhrs < 6) 
    begin 

    EXEC msdb.dbo.sp_send_dbmail 
    @profile_name = 'mail.pacificlawnsprinklers.com', 
    @recipients = '[email protected]', 
    @query = ' 

    SET NOCOUNT ON; 

    SELECT EMP_ID, DateName(weekday, Cast(schedule.DATE AS date)),schedule.[DATE], SUM(duration) as TotalHrs 
    FROM pl00.DBO.schedule 
    where (schedule.DATE = CONVERT(char(10), getdate()+2, 121) 
    and schedule.TYPE <> "Z") 
    group by EMP_ID, schedule.DATE 
    ', 
    @subject = 'Lights Lists to Review', 
    @attach_query_result_as_file = 0 ; 

    end 
+0

Dies ist eine der seltenen Zeiten wäre, wo ein Cursor geeignet ist. Sie benötigen zuerst eine Liste aller EMP_IDs, um auch eine E-Mail zu senden. Fügen Sie dann der Abfrage für die EMP_ID ein anderes Prädikat hinzu. Durchlaufen Sie die Liste und senden Sie für jeden Empfänger eine E-Mail. –

+0

Ich möchte nicht jede Person per E-Mail kontaktieren. Ich möchte mich zuerst nur alarmieren, wenn IRGENDEIN der Technologie eine Dauer <6 nicht eine Summe aller Techniker haben, dann wähle ich NUR die Techniker mit einer Dauer Summe weniger als 6 –

+1

Gotcha. Der einfachste Weg, um festzustellen, ob einer von ihnen eine Dauer <6 hat, ist die Verwendung von EXISTS. Dann können Sie alle Namen mit einer Standard-Select-Anweisung abrufen. Wenn Sie Hilfe bei der eigentlichen Programmierung benötigen, sollten Sie hier beginnen. http://spaghettiba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

Antwort

0

remove mysql-Tag .

Diese Abfrage:

SELECT EMP_ID, DateName(weekday, Cast(schedule.DATE AS date)), SUM(duration) as TotalHrs 
FROM pl00.DBO.schedule 
where (schedule.DATE = CONVERT(char(10), getdate()+2, 121) -- ? 
and schedule.TYPE <> "Z") 
group by EMP_ID, Cast(schedule.DATE AS date) 
HAVING SUM(duration) > 6 
+0

Okay, das funktioniert für das was angezeigt wird, aber ist da weg, um den Alarmteil der Funktion zu erhalten, nur die E-Mail zu senden, wenn die Bedingung eines Mitarbeiters mit Dauer Summe <6 dann löst es Liste –

+0

Es gibt nicht genug Informationen zu beantworten diese Frage. Gibt es eine Anwendung, um diese Warnung zu senden? Welche Programmiersprache, Code haben Sie in dieser App, wie Sie Alarm senden müssen etc ... –

+0

ist es in meinem ursprünglichen Code, ich mache eine IF-Anweisung, um die Abfrage auszulösen, die in einer E-Mail gesendet werden würde, aber wenn ich nicht kann Erhalten Sie die if-Anweisung, um die Gesamtdauer pro Mitarbeiter zu betrachten, um über 6 zu sein, dann kann ich keine E-Mail richtig auslösen –

Verwandte Themen