安排我希望得到員工(垂直)的名單和他們的工作做了安排由周(水平),到目前爲止,我已經成功地編寫代碼:通過周,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和幾周重複的工作。 什麼即時做錯了?
謝謝大家的幫助!
更新:我已經改變了代碼,現在是空值的問題,有沒有零值:(
CFOUTPUT的組屬性可能會有所幫助。確保你的查詢有一個order by子句。 –
@DanBracuk我用過它,對於第一組=「employee_id」=第二組=「周」沒有幫助...即使我使用coelesence也沒有看到零值 –
那麼這就是應該發生。 'Coalesce'不是一個神奇的子彈。它不*添加*丟失的記錄。如果你的JOIN返回一個記錄(「Apr 2」),而不是三個(「Apr 2」,「Apr 3」,「Apr4」),那麼coalesce不會改變這個記錄。正如你發現的,你需要一個數據透視表(你說的不支持你的版本)或者一個'case' – Leigh