0

部門ごとにグループ化された従業員を表示するクエリと表示があります。それは正常に動作しますが、私が理解できないことが必要なことがもう1つあります。部門名の横に、「(x 従業員)」というテキストを追加する必要があります。ここで、x はその部門の従業員数です。例:

MARKETING (2 employees)
  John Doe
  Jane Smith

私のコードは以下の通りです:

<cfquery name="getEmpsByDept" datasource="#application.DSN#" dbtype="ODBC">
    SELECT          DISTINCT First, Last, Department
    FROM            SuccessFactorsPeople
    ORDER BY        Department
</cfquery>


<table border="0" width="70%" cellpadding="0" cellspacing="0">
<cfoutput query="getEmpsByDept" group="Department">
    <tr>
        <td><b>#Ucase(Department)#</b></td>
    </tr>

    <cfoutput>
    <tr>
        <td>&nbsp;&nbsp; #TRIM(First)#&nbsp;#TRIM(Last)#</td>
    </tr>
    </cfoutput>

    <tr>
        <td height="0">&nbsp;</td>
    </tr>
</cfoutput>
</table>
4

3 に答える 3

2

使用できるビルトインカウンターはありません。各部門のカウンターを取得するには、グループ内の各レコードをループする必要があります。

また、クエリ変数のスコープを設定してください

<cfoutput query="getEmpsByDept" group="Department">
  <cfset empCount = 0>
  <cfoutput>
    <cfset empCount++>
  </cfoutput>
  <tr>
    <td><b>#Ucase(getEmpsByDept.Department)# #empCount# Employees</b></td>
  </tr>
  <cfoutput>
    <tr>
      <td>&nbsp;&nbsp; #TRIM(getEmpsByDept.First)#&nbsp;#TRIM(getEmpsByDept.Last)#</td>
    </tr>
  </cfoutput> 
  <tr>
    <td height="0">&nbsp;</td>
  </tr>
</cfoutput>
于 2013-11-12T19:05:17.980 に答える
1

CF 10 または Railo 4 を使用していて、クリエイティブになりたい場合は、 Underscore.cfcの countBy()を使用できます。

// instantiate Underscore library
_ = new Underscore();

// get a struct of employee counts by department
empCountsByDept = _.countBy(getEmpsByDept, function (row) {
  return row.Department;
});

empCountsByDept次に、次のように、出力コードで構造体を参照するだけです。

<td><b>#Ucase(getEmpsByDept.Department)# (#empCountsByDept[Department]# employees)</b></td>

注:Underscore.cfcを書きました

于 2013-11-13T06:11:57.903 に答える
1

SQLでgroup byを使用する必要があります

特定の部門について、異なる名前がある場合にカウントが異なると想定される場合、これが必要です

<cfquery name="getEmpsByDept" datasource="#application.DSN#" dbtype="ODBC">
SELECT          First, Last, Department, COUNT(Department) AS Department Count
FROM            SuccessFactorsPeople
GROUP BY        First, Last, Department
Order by        Department
</cfquery>

これにより、何があっMAX(first)ても部門ごとに 1 つの行を取得することが保証されますが、MAX(last)他の問題が発生する可能性があります

<cfquery name="getEmpsByDept" datasource="#application.DSN#" dbtype="ODBC">
SELECT          MAX(First) AS First, MAX(Last) AS Last, Department, COUNT(Department) AS DepartmentCount
FROM            SuccessFactorsPeople
GROUP BY        Department
Order by        Department
</cfquery>

最初と最後で崩れたくない場合。

<cfquery name="getEmpsByDept" datasource="#application.DSN#" dbtype="ODBC">
SELECT          DISTINCT First, Last, A.Department, DepartmentCount
FROM            SuccessFactorsPeople A
INNER JOIN (
   SELECT Department, COUNT(Department) AS DepartmentCount
   FROM SuccessFactorsPeople
   GROUP BY Department
   ) B
ON A.Department = B.Department
ORDER BY        A.Department
</cfquery>
于 2013-11-12T19:07:00.010 に答える