2014-04-15 27 views
0

安排我希望得到員工(垂直)的名單和他們的工作做了安排由周(水平),到目前爲止,我已經成功地編寫代碼:通過周,SQL和ColdFusion

SQL代碼

SELECT EP.EMPLOYEE_ID,EP.EMPLOYEE_NAME,EP.EMPLOYEE_SURNAME,WEEK=DATEDIFF(WEEK, DATEADD(MONTH, DATEDIFF(MONTH, 0, PW.RECORD_DATE), 0), PW.RECORD_DATE) +1, 
    WORKS=SUM(CASE WHEN PW.WORK_ID IS NOT NULL THEN 1 ELSE 0 END) 
    FROM EMPLOYEE_POSITIONS EP 
    LEFT OUTER JOIN PRO_WORKS PW ON PW.PROJECT_EMP_ID=EP.EMPLOYEE_ID 
    WHERE EP.POSITION_STATUS=1 AND DATEPART(MM,PW.RECORD_DATE)=#attributes.month# AND DATEPART(YY,PW.RECORD_DATE)=#session.ep.period_year# 
    GROUP BY EP.EMPLOYEE_ID,DATEDIFF(WEEK, DATEADD(MONTH, DATEDIFF(MONTH, 0, PW.RECORD_DATE), 0), PW.RECORD_DATE) +1,EP.EMPLOYEE_NAME,EP.EMPLOYEE_SURNAME 
    ORDER BY EP.EMPLOYEE_NAME,EP.EMPLOYEE_SURNAME 

輸出

<cfoutput query="get_works" group="employee_id"> 
     <tr height="20" onMouseOver="this.className='color-light';" onMouseOut="this.className='color-row';" class="color-row"> 
      <td>#EMPLOYEE_NAME# #EMPLOYEE_SURNAME#</td> 
      <cfoutput> 
       <td>#WORKS# - #WEEK#</td> 
      </cfoutput> 
     </tr> 
    </cfoutput> 

這樣做的輸出,重複EMP列表loyees和幾周重複的工作。 什麼即時做錯了?

謝謝大家的幫助!

更新:我已經改變了代碼,現在是空值的問題,有沒有零值:(

+1

CFOUTPUT的組屬性可能會有所幫助。確保你的查詢有一個order by子句。 –

+0

@DanBracuk我用過它,對於第一組=「employee_id」=第二組=「周」沒有幫助...即使我使用coelesence也沒有看到零值 –

+0

那麼這就是應該發生。 'Coalesce'不是一個神奇的子彈。它不*添加*丟失的記錄。如果你的JOIN返回一個記錄(「Apr 2」),而不是三個(「Apr 2」,「Apr 3」,「Apr4」),那麼coalesce不會改變這個記錄。正如你發現的,你需要一個數據透視表(你說的不支持你的版本)或者一個'case' – Leigh

回答

0

我已經設法解決我的問題由ARR通過這種方式,每個星期風港在一個月:

SELECT EP.EMPLOYEE_ID,EP.EMPLOYEE_NAME,EP.EMPLOYEE_SURNAME, 
    WEEK1=SUM(CASE WHEN (DATEDIFF(WEEK, DATEADD(MONTH, DATEDIFF(MONTH, 0, PW.RECORD_DATE), 0), PW.RECORD_DATE) +1)=1 THEN 1 ELSE 0 END), 
    WEEK2=SUM(CASE WHEN (DATEDIFF(WEEK, DATEADD(MONTH, DATEDIFF(MONTH, 0, PW.RECORD_DATE), 0), PW.RECORD_DATE) +1)=2 THEN 1 ELSE 0 END), 
    WEEK3=SUM(CASE WHEN (DATEDIFF(WEEK, DATEADD(MONTH, DATEDIFF(MONTH, 0, PW.RECORD_DATE), 0), PW.RECORD_DATE) +1)=3 THEN 1 ELSE 0 END), 
    WEEK4=SUM(CASE WHEN (DATEDIFF(WEEK, DATEADD(MONTH, DATEDIFF(MONTH, 0, PW.RECORD_DATE), 0), PW.RECORD_DATE) +1)=4 THEN 1 ELSE 0 END), 
    WEEK5=SUM(CASE WHEN (DATEDIFF(WEEK, DATEADD(MONTH, DATEDIFF(MONTH, 0, PW.RECORD_DATE), 0), PW.RECORD_DATE) +1)=5 THEN 1 ELSE 0 END), 
    WEEK6=SUM(CASE WHEN (DATEDIFF(WEEK, DATEADD(MONTH, DATEDIFF(MONTH, 0, PW.RECORD_DATE), 0), PW.RECORD_DATE) +1)=6 THEN 1 ELSE 0 END) 
    FROM EMPLOYEE_POSITIONS EP 
    LEFT OUTER JOIN PRO_WORKS PW ON PW.PROJECT_EMP_ID=EP.EMPLOYEE_ID 
    WHERE EP.POSITION_STATUS=1 AND DATEPART(MM,PW.RECORD_DATE)=#attributes.month# AND DATEPART(YY,PW.RECORD_DATE)=#session.ep.period_year# 
    GROUP BY EP.EMPLOYEE_ID,EP.EMPLOYEE_NAME,EP.EMPLOYEE_SURNAME 
    ORDER BY EP.EMPLOYEE_NAME,EP.EMPLOYEE_SURNAME 

輸出:

<cfoutput query="get_works"> 
     <tr height="20" onMouseOver="this.className='color-light';" onMouseOut="this.className='color-row';" class="color-row"> 
      <td>#EMPLOYEE_NAME# #EMPLOYEE_SURNAME#</td> 
      <td style="text-align:center;">#week1#</td> 
      <td style="text-align:center;">#week2#</td> 
      <td style="text-align:center;">#week3#</td> 
      <td style="text-align:center;">#week4#</td> 
      <td style="text-align:center;">#week5#</td> 
      <td style="text-align:center;">#week6#</td> 
     </tr> 
    </cfoutput>