0

質問があります:

<cfquery name="getDesc" datasource="#ds#">
  SELECT
    desc,
    SUM(charge) as cost,
    COUNT(*) as cnt
  FROM
    product
  WHERE Length(desc) > 0
</cfquery>

次に、テーブルにデータを入力します。

<table>
  <tbody>
      <tr>
        <th>Description</th>
        <th>Amount of Charges</th>
        <th>Cost (&pound;)</th>
      </tr>

      <cfoutput query="getDesc">
      <tr>
        <td>
          #HTMLEditFormat(getDesc.desc)# <br />
        </td>     
        <td>
          #HTMLEditFormat(getDesc.cnt)# <br />
        </td>
        <td>
            #HTMLEditFormat(getDesc.cost)# <br />
        </td>
      </tr>
    </cfoutput>
  </tbody>
</table>

私の問題は、同じ値を持ち、両方のカウントを合計したテーブルの2つの行を結合したいということです。

これまでのところ:

<table>
  <tbody>
      <tr>
        <th>Description</th>
        <th>Amount of Charges</th>
        <th>Cost (&pound;)</th>
      </tr>

      <cfoutput query="getDesc">
      <tr>
        <cfif getDesc.desc EQ 'No Charge' OR getDesc.desc EQ 'No Charge (2)'>
          <td>
            No Charge & (2)
          </td>
          <td>
            <cfset cntSum = arraySum(getDesc['cnt'])>
            #cntSum#
          </td>
        <cfelse>
        <td>
          #HTMLEditFormat(getDesc.desc)# <br />
        </td>     
        <td>
          #HTMLEditFormat(getDesc.cnt)# <br />
        </td>
        </cfif>
        <td>
            #HTMLEditFormat(getDesc.cost)# <br />
        </td>
      </tr>
    </cfoutput>
  </tbody>
</table>

しかし、これにより「無料&(2)」の2行が得られ、カウントは、必要な2行だけでなく、テーブル内の残りのすべての行の合計になります。

これが理にかなっていることを願っています。

4

1 に答える 1

5

必要なデータを取得するために、クエリを変更します。これが私がちょうどあなたの要件を満たすと思うものを作り上げたものです:

  SELECT
    CASE `desc` WHEN 'No Charge (2)' THEN 'No Charge' ELSE `desc` END,
    SUM(charge) as cost,
    COUNT(*) as cnt
  FROM
    product
  WHERE Length(`desc`) > 0
  group by CASE `desc` WHEN 'No Charge (2)' THEN 'No Charge' ELSE `desc` END

caseステートメントは「NoCharge(2)」を「NoCharge」に変更しているため、両方の種類の値の行は1つだけです。group byステートメントは、mySQLに「desc」の異なる値ごとに1回合計とカウントを実行させます。

于 2012-11-16T11:01:58.517 に答える