2016-03-11 21 views
1

我有一個表名Emp_mon_day其中包括員工目前缺席的細節計算天存在和不存在表

我要的是

我需要爲這9名員工,大約目前天與日缺席從Emp_mon_day表中每個員工的信息合併到下面的查詢

QUERY

SELECT e.comp_mkey, 
    e.status, 
    e.resig_date, 
    dt_of_leave, 
    e.emp_name, 
    e.date_of_joining, 
    e.emp_card_no, 
    a.pl_days, 
    pl_days_opening, 
    a.month1, 
    a.month2, 
    a.month3, 
    a.month4, 
    a.month5, 
    a.month6, 
    a.month7, 
    a.month8, 
    a.month9, 
    a.month10, 
    a.month11, 
    a.month12,  
    a.month1 + a.month2 + a.month3 + a.month4 + a.month5 + a.month6 + a.month7 + a.month8 + a.month9 + +a.month10 + a.month11 + a.month12 AS pl_sum 
    FROM p_leave_allocation AS a 
    INNER JOIN 
    emp_mst AS e 
    ON a.emp_card_no = e.emp_card_no 
    WHERE a.year = 2016 
    AND (datediff(MONTH, e.date_of_joining, CONVERT (DATETIME, getdate(), 103)) >= 6 
     AND datediff(MONTH, e.date_of_joining, CONVERT (DATETIME, getdate(), 103)) <= 36) 
    AND (e.resig_date IS NULL 
     OR (e.dt_of_leave IS NOT NULL 
      AND e.dt_of_leave >= CONVERT (DATETIME, getdate(), 103))) 
    AND e.status IN ('A', 'S') 
    AND e.comp_mkey IN (7, 110) 
    AND a.Year = 2016; 

以上查詢爲我提供的數據如下

[![圖像數據] [1] [1]

Emp_mon_day列細節低於

[![在這裏輸入的形象描述] [2] [2]

+0

什麼必須在輸出格式?你想重複所有天的這9條記錄 – DhruvJoshi

+0

@DhruvJoshi:Naah,看到目前的這些僱員的計算,缺席我想合併,在這個查詢 – BNN

+0

在這種情況下,你要計算現/缺席日 – DhruvJoshi

回答

1

你可以試試下面的查詢:

SELECT e.comp_mkey, e.status, e.resig_date, dt_of_leave, e.emp_name, 
    e.date_of_joining, e.emp_card_no, a.pl_days, pl_days_opening, a.month1, 
    a.month2, a.month3, a.month4, a.month5, a.month6, a.month7, a.month8, 
    a.month9, a.month10, a.month11, a.month12,  
    a.month1 + a.month2 + a.month3 + a.month4 + a.month5 + a.month6 + a.month7 + a.month8 + a.month9 + +a.month10 + a.month11 + a.month12 AS pl_sum, 
    m.[DaysAbsent],m.[DaysPresent] 
    FROM p_leave_allocation AS a 
    INNER JOIN 
    emp_mst AS e 
    ON a.emp_card_no = e.emp_card_no 
    INNER JOIN 
    (
    SELECT 
     comp_mkey,emp_mkey,[month],[year], 
     SUM(CASE WHEN data ='AB' THEN 1 ELSE 0 END) AS [DaysAbsent], 
     SUM(CASE WHEN data ='P' THEN 1 ELSE 0 END) AS [DaysPresent] 
    FROM 
     (
     SELECT comp_mkey,emp_mkey,[month],[year],[Day1],[Day2],[Day3],[Day4],[Day5] 
     --,... 
     FROM Emp_mon_day 
     ) source 
     UNPIVOT 
     (
     data FOR day IN ([Day1],[Day2],[Day3],[Day4],[Day5]) -- dynamic query can generate all days data 
     )up 
     GROUP BY comp_mkey, emp_mkey,[month],[year] 
    ) AS m 
    ON m.comp_mkey=e.Comp_mkey and m.emp_mkey=e.mkey 
    --- ABOVE CRITERIA NEEDS TO BE CHECKED 
    WHERE a.year = 2016 
    AND (datediff(MONTH, e.date_of_joining, CONVERT (DATETIME, getdate(), 103)) >= 6 
     AND datediff(MONTH, e.date_of_joining, CONVERT (DATETIME, getdate(), 103)) <= 36) 
    AND (e.resig_date IS NULL 
     OR (e.dt_of_leave IS NOT NULL 
      AND e.dt_of_leave >= CONVERT (DATETIME, getdate(), 103))) 
    AND e.status IN ('A', 'S') 
    AND e.comp_mkey IN (7, 110) 
    AND a.Year = 2016; 

說明:

我們增加了一個INNER JOIN到現有的查詢來獲取整理的DaysPresentDaysAbsent

數據爲進一步優化這一點,我建議你直接申請以下WHERE子句source設置

WHERE comp_mkey IN (7, 110) AND Year = 2016; 
+0

這意味着您在Emp_mon_day中沒有'emp_card_no'列。請讓我知道'Emp_mon_day'和'emp_mst'之間的連接標準 – DhruvJoshi

+0

@coder請再次檢查 – DhruvJoshi

+0

@coder我無法解決這個問題,因爲我無法訪問模式和數據。請通過執行內部查詢來查看是否產生任何數據來排除故障。如果是這樣,接下來的事情就是檢查連接標準,以便數據正確傳遞。既然你現在得到了0條記錄,INNER JOIN就是因爲它沒有匹配兩個表之間的任何東西而被指責。 – DhruvJoshi