隨筆-199  評論-203  文章-11  trackbacks-0
          --今天一天爲了計算一個全勤獎,快把我給鬱悶死了,如下是我今天的一點成績,那位朋友如果有更好的建議歡迎--指教!謝謝...!
          SELECT 年月,部門編號,員工ID,員工卡號,姓名,事假天數,曠工天數,/*進廠日期,上班日期,離職日期,上班時間,離職時間,*/
            --根據離職人員離職日期分給相應全勤獎.
            CASE 離職時間 WHEN 0 THEN 全勤獎 WHEN 1 THEN 全勤獎-10 WHEN 2 THEN 全勤獎-20 ELSE 全勤獎*0 END 全勤獎
            FROM(
            --C
            SELECT 年月,部門編號,員工ID,員工卡號,姓名,事假天數,曠工天數,進廠日期,上班日期,離職日期,上班時間,離職時間,
              --曠工者全勤為0,新進員工3號以後進廠的全勤為0,離職人員如果是在本月倒數第三天之前的全勤為0.
              CASE WHEN 曠工天數> 0 OR 上班時間 >= 3 OR 離職時間 >=3 THEN 0
                 WHEN 上班時間= 2 THEN --新進員工2號進廠的全勤為10
                 CASE WHEN 事假天數 = 0    THEN 10
                    WHEN 事假天數 = 0.5 THEN 5
                    WHEN 事假天數 >= 1  THEN 0 END
                 WHEN 上班時間=1 THEN --新進員工1號進廠的全勤為20
                  CASE WHEN 事假天數 = 0    THEN 20
                    WHEN 事假天數 = 0.5 THEN 15
                    WHEN 事假天數 = 1.5 THEN 5
                    WHEN 事假天數 >= 2  THEN 0 END
               WHEN 上班時間=0 THEN --老員工全勤為30
                 CASE WHEN 事假天數 = 0    THEN 30
                    WHEN 事假天數 = 0.5 THEN 25
                    WHEN 事假天數 = 1    THEN 20
                    WHEN 事假天數 = 1.5 THEN 15
                    WHEN 事假天數 = 2    THEN 10
                    WHEN 事假天數 = 2.5 THEN 5
                    WHEN 事假天數 >= 3    THEN 0 END   
               END 全勤獎
            FROM(
             SELECT 年月,部門編號,員工ID,員工卡號,姓名,進廠日期,上班日期,離職日期,
            --如果進廠年月等于上班年月,表示此員工為新員工.
            CASE WHEN LEFT(進廠日期,6)=LEFT(上班日期,6) THEN CAST(RIGHT(上班日期,2)AS INT) ELSE 0 END 上班時間,
            --如果進廠年月等于上班年月,表示此本月即將離職
            CASE WHEN LEFT(離職日期,6)='200902' THEN
             CAST(RIGHT(CONVERT(VARCHAR(8),DATEADD(D,-1,DATEADD(M,1,'20090201')),112),2) AS INT)-
             CAST(RIGHT(離職日期,2)AS INT)
             ELSE 0 END  離職時間,
            ISNULL(SUM(CASE 假別 WHEN '事假' THEN 假別天數  END),0) 事假天數,
            ISNULL(SUM(CASE 假別 WHEN '曠工' THEN 假別天數 END),0) 曠工天數
             FROM(
              SELECT D.年月,D.部門編號,D.員工ID,D.員工卡號,D.姓名,D.假別,D.假別天數,E.進廠日期,E.上班日期,E.離職日期
               FROM(
               SELECT C.年月,A.部門編號,A.員工ID,A.員工卡號,A.姓名,
                 CASE WHEN C.假別!=  '曠工' AND C.假別!='輪休' THEN '事假' ELSE C.假別 END 假別,SUM(C.天數) 假別天數--,進廠日期
                FROM SPG_TECH.每日刷卡 A 
                INNER JOIN ( --員工本月最後一天在那個部門上班算那個部門
                   SELECT 員工ID,MAX(日期) AS 日期   FROM SPG_TECH.每日刷卡
                    WHERE CONVERT(CHAR(6),日期,112) LIKE '200902'+'%' AND 上班!='' 
                            GROUP BY 員工ID
                   )B
                ON A.員工ID=B.員工ID AND A.日期=B.日期
                INNER JOIN( --根據員工ID,統計底薪天數
                   SELECT CONVERT(CHAR(6),日期,112) 年月,員工ID,員工卡號,姓名,
                     CASE 假別 WHEN '' THEN 備注 ELSE 假別 END AS 假別,備注,
                     CASE  WHEN 假別 ='' AND 備注 = '' THEN 0 ELSE COUNT(備注) END 備註,
                     CASE WHEN 備注 != '曠工' AND 備注 != '' THEN COUNT(備注) * 0.5 ELSE
                     CASE  WHEN 假別 ='' AND 備注 = '' THEN 0 ELSE COUNT(備注) END END 天數
                    FROM SPG_TECH.每日刷卡
                    WHERE  CONVERT(CHAR(6),日期,112) LIKE '200902'+'%' --AND 姓名='朱小女'
                    GROUP BY CONVERT(CHAR(6),日期,112),員工ID,員工卡號,姓名,假別,備注
                 )C
                ON A.員工ID = C.員工ID
               
                WHERE 部門編號 IN( SELECT 部門編號  FROM SPG.SPG_TECH.部門資料     --只針對針車部門,過濾其它部門
                    WHERE 廠內外='內' AND 是否職干!='是' AND 單位區別='A'  AND 部門編號 LIKE '%' +'-S'+'%')
                    AND 部門編號='BL3-S4'  
                GROUP BY C.年月,A.員工ID,A.姓名,A.員工卡號,A.部門編號,CASE WHEN C.假別!=  '曠工' AND C.假別!='輪休' THEN '事假' ELSE C.假別 END
             
               )D
               INNER JOIN(
                SELECT A.員工ID,A.員工卡號,A.姓名,CONVERT(CHAR(8),MIN(A.日期),112) 上班日期,
                 CONVERT(CHAR(8),B.進廠日期,112) 進廠日期,CONVERT(CHAR(8),B.離職日期,112) 離職日期
                 FROM SPG_TECH.每日刷卡 A
                 INNER JOIN SPG_TECH.員工資料 B
                 ON A.員工ID = B.員工ID
                 WHERE CONVERT(CHAR(6),日期,112) LIKE  '200902'+'%' -- AND A.部門編號='BL2-S1'
                 GROUP BY A.員工ID,A.員工卡號,A.姓名,B.進廠日期,B.離職日期
                 )E
               ON D.員工ID = E.員工ID
            )F GROUP BY  年月,部門編號,員工ID,員工卡號,姓名,進廠日期,上班日期,離職日期
           )G
          )H ORDER BY 年月,部門編號,員工卡號
          posted on 2009-04-09 19:32 Werther 閱讀(912) 評論(0)  編輯  收藏 所屬分類: 15.SQL Server
          主站蜘蛛池模板: 云安县| 文登市| 乌恰县| 名山县| 西丰县| 特克斯县| 温泉县| 汉源县| 遵化市| 南岸区| 华亭县| 高安市| 揭西县| 肇源县| 镇江市| 陈巴尔虎旗| 正蓝旗| 阿拉善右旗| 廊坊市| 镇巴县| 丹凤县| 罗山县| 沈丘县| 泊头市| 日土县| 蓝山县| 云霄县| 高淳县| 隆子县| 东丰县| 杭锦后旗| 新津县| 蚌埠市| 东乡族自治县| 丰台区| 富阳市| 桓台县| 巴中市| 定日县| 民乐县| 达日县|