2016-05-16 28 views
-1

Ich habe eine Tabelle, die tägliche Anwesenheit aufzeichnen.Gruppe für Monat für Anwesenheitsliste

CREATE TABLE "DAILY_ATTENDANCE" (
    "SERIAL_NO" NUMBER(10,0), 
    "EMPLOYEE_ID" NUMBER(4,0), 
    "FIRST_NAME" VARCHAR2(100), 
    "MIDDLE_NAME" VARCHAR2(100), 
    "LAST_NAME" VARCHAR2(100), 
    "ATTENDANCE_DATE" DATE, 
    "STATUS" VARCHAR2(100) DEFAULT 'PRESENT', 
    "MONTH" VARCHAR2(100), 
    "YEAR" VARCHAR2(100), 
    CONSTRAINT "DAILY_ATTENDANCE_PK" PRIMARY KEY ("SERIAL_NO") ENABLE, 
    CONSTRAINT "DAILY_ATTENDANCE_UK1" UNIQUE ("EMPLOYEE_ID", "ATTENDANCE_DATE")  
    ENABLE 
); 

create or replace trigger "DAILY_ATTENDANCE_T5" 
    BEFORE insert or update on "DAILY_ATTENDANCE" 
    for each row 
    begin 
     :new.month:= to_char(:new.ATTENDANCE_DATE, 'month') ; 
     :new.year:= to_char(:new.ATTENDANCE_DATE, 'YYYY') ; 
    end; 

Wie kann ich eine einfache SQL-Anweisung schreiben, die monatlich & jährlich Gruppierung der Mitarbeiter-ID und Status gibt? Status hat Werte wie Gegenwart, Krankenstand usw. ZB: finden Sie keine Krankenstände von employee_id = 1001 in jedem Monat des Jahres 2015?

+0

Bearbeiten Sie Ihre Frage und Beispieldaten und die gewünschten Ergebnisse liefern. –

Antwort

0

Sie unter Abfrage versuchen:

select a.year,a.month,a.employeeId,count(*) 
from 
(select * from DAILY_ATTENDANCE where status ='sickleave')a 
group by a.year,a.month,a.employeeId