Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

तालिका से उपस्थित और अनुपस्थित दिनों की गणना करें

आप नीचे दी गई क्वेरी को आज़मा सकते हैं:

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;

स्पष्टीकरण:

हमने DaysPresent का एकत्रित डेटा प्राप्त करने के लिए मौजूदा क्वेरी में एक और INNER JOIN जोड़ा है और DaysAbsent

इसे और अधिक अनुकूलित करने के लिए, मेरा सुझाव है कि आप निम्नलिखित WHERE पर सीधे आवेदन करें source . का खंड सेट

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर (T-SQL) में CHAR () फ़ंक्शन कैसे काम करता है

  2. एसक्यूएल में स्ट्रिंग से चार, डबल, इंट पैटर्न पढ़ें

  3. JSON_VALUE () SQL सर्वर में उदाहरण (T-SQL)

  4. Node.js MSSQL टेडियस कनेक्शन त्रुटि:लोकलहोस्ट से कनेक्ट करने में विफल:1433 - ECONNREFUSED कनेक्ट करें

  5. SQL सर्वर (T-SQL) में वर्तमान भाषा कैसे सेट करें