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の照合データを取得するために、既存のクエリに別のINNERJOINを追加しました およびDaysAbsent

    これをさらに最適化するには、次のWHEREを直接適用することをお勧めします sourceへの句 セット

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



    1. Crystalレポートがデータベースからデータを取得できませんでした

    2. MySQLクエリブラウザでクエリパラメータを設定するにはどうすればよいですか?

    3. タグ(キーワード)をデータベースに保存する方法は?

    4. SymfonyとDoctrineが効果なしに移行を行う