1

私はこれをかなり調査しましたが、探している答えがまったく見つかりませんでした。少しの助けでここまでたどり着くことができましたが、今また別のハードルに立ち往生しています。

左端の列にすべての一意の会社名を表示し、次に特定の月に実施された各タイプのテスト数の「集計」を表示できるようにしたいと考えています。コードの一部をコメントアウトしましたが、それは機能しますが、特定のテストの数がゼロに等しい場合 (条件に適合するレコードがデータベースにない場合) を考慮していません。他のテストが「集計」を混同しないようにしてください。私のコードはおそらく詳しく説明するのに役立ちます:

<cfset s = structNew()>
<cfquery datasource="test" name="qry">
    SELECT company, test_type, count(test_type) as counter 
    FROM donor_log
    GROUP BY company, test_type
</cfquery>

<cfloop query="qry">
    <cfset s[qry.company][qry.test_type] = qry.counter>
</cfloop>

<table border="1">
    <tr>
        <th>Company</th>
        <th>UA</th>
        <th>BA</th>
        <th>Hair</th>
        <th>Blood</th>
    </tr>
    <cfoutput>
    <cfloop collection="#s#" item="i">
        <tr>
            <td>#i#</td>
            <cfloop collection="#s[i]#" item="j">
                <cfquery dbtype="query" name="ua">
                    SELECT DISTINCT company 
                    FROM qry 
                    WHERE company='#i#' 
                      AND test_type='UA'
                </cfquery>
                <cfdump var="#ua#"> 
                <!---
                <cfif val(s[i][j]) EQ 0>
                    <td>0</td>
                <cfelse>  
                    <td>#s[i][j]#</td>
                </cfif>
                 --->
            </cfloop>  
        </tr>
    </cfloop> 
    </cfoutput>

structKey値が 0の場合、コメント セクションは画面に '0' を出力しません。現在、ある企業の UA が 0 で BA が 2 の場合、UA の下のセルには 2 が表示され、BA には何も表示されません。したがって、私の発言にも何か問題がありますが、それが何かは<cfif>わかりません。私は ColdFusion を学び始めたばかりであり、この特定のページにあるほとんどの内容は、別のフォーラムの別の親切な人の投稿からのものであることを理解してください。返信とご意見をお待ちしております。よろしくお願いします。

PSクイック編集:<cfdump>上記のように使用すると、出力は、そのようなレコードが1つある会社に対して1つのクエリ全体、そのようなレコードcompany="#i#" AND test_type="UA"が2つある会社に対して2つのクエリ、一致するレコードが3つある場合は3つのクエリなどです。最終的には、このクエリを各会社に対して 1 回だけ実行し、(0 以外"#i#"の場所で) をプルして、それs[i][j].recordcountを別のテーブル (料金表) と比較し、各会社に基づいて請求する合計金額を生成できるようにしたいと考えています。それが理にかなっている場合は、実行されたテストの数についてですが、最初にこの橋を渡る必要があります。

4

1 に答える 1

2

あなたの質問を正しく理解していれば、以下のようにクエリを再編成します

<cfquery datasource="test" name="qry">
SELECT company, SUM(CASE WHEN test_type = 'UA' THEN 1 ELSE 0 END) AS UACount
, SUM(CASE WHEN test_type = 'BA' THEN 1 ELSE 0 END) AS BACount
, SUM(CASE WHEN test_type = 'Hair' THEN 1 ELSE 0 END) AS HairCount
, SUM(CASE WHEN test_type = 'Blood' THEN 1 ELSE 0 END) AS BloodCount
FROM donor_log
GROUP BY company
</cfquery>

そして出力

<table border="1">
<tr>
    <th>Company</th>
    <th>UA</th>
    <th>BA</th>
    <th>Hair</th>
    <th>Blood</th>
</tr>
<cfoutput query="qry">
 <tr>
  <td>#qry.Company#</td>
  <td>#qry.UACount#</td>
  <td>#qry.BHCount#</td>
  <td>#qry.HairCount#</td>
  <td>#qry.BloodCount#</td>
 </tr>
</cfoutput>
于 2013-02-04T21:15:32.287 に答える