0

クエリから結果のグループを希望どおりに取得する方法をまだ学んでいます。オンラインで多数の例を見てきましたが、私のニーズに完全に適合するものはありませんでした。テーブルから特定の日付範囲を持つ一連のレコードを取得し、会社名でサブフィルター処理してから、test_type フィールドの数でサブフィルター処理する最も直接的な方法を探しています。企業の数が増え続けているため、動的である必要があります(テストタイプでは非動的です。これらは設定されており、変更されません)。この問題は、約 1 か月前にここに投稿した別の問題と非常によく似ていますが、サービスの日付 (フィールド名「dos」) で結果をさらに (超?) フィルター処理する必要があります。これが私の現在のコードです(機能していません。「donor_log.company」でエラーが発生します)

<cfquery name="invall" datasource="test">
SELECT company,dos, 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 = 'Bld' THEN 1 ELSE 0 END) AS BldCount,
    SUM(CASE WHEN test_type = 'DNA' THEN 1 ELSE 0 END) AS DNACount,
    SUM(CASE WHEN test_type = 'Pat' THEN 1 ELSE 0 END) AS PatCount,
    SUM(CASE WHEN test_type = 'Phys' THEN 1 ELSE 0 END) AS PhysCount,
    SUM(CASE WHEN test_type = 'Obs' THEN 1 ELSE 0 END) AS ObsCount
FROM donor_log
    WHERE dos BETWEEN '2013-03-01' AND '2013-03-13'
    GROUP BY dos
    ORDER BY dos DESC   
</cfquery>

<table border="1">
<tr>

    <th>Company</th>
    <th>UA</th>
    <th>Obs. UA</th>
    <th>BA</th>
    <th>Hair</th>
    <th>Blood</th>
    <th>DNA</th>
    <th>Pat.</th>
    <th>Phys.</th>
</tr>
<cfoutput query="invall" group="dos">
    #dateformat(invall.dos,"mm-dd-yyyy")#
<tr>

    <td>#invall.company#</td>
    <td>#invall.UACount#</td>
    <td>#invall.ObsCount#</td>
    <td>#invall.BACount#</td>
    <td>#invall.HairCount#</td>
    <td>#invall.BldCount#</td>
    <td>#invall.DNACount#</td>
    <td>#invall.PatCount#</td>
    <td>#invall.PhysCount#</td>
</tr>
</cfoutput>
</table>

selectステートメントの2つの非集計列が気に入らないため、会社ごとにフィルタリングされていないことは理解していますが、これを変更してそのようなものを取得する方法を考えています(この「Webページ」は、請求書の要約ページになりますさまざまなクライアントですが、参考までに、実際に請求するわけではありません):

    03-13-2013
           UA    BA    HAIR    BLD  (ETC...)
COMPANY A   3     2     0       0
COMPANY B   1     0     0       0
COMPANY C   2     4     0       0

    03-12-2013
           UA    BA    HAIR    BLD
COMPANY A   1     0     0       0
COMPANY C   2     1     1       0

    03-11-2013
           UA    BA    HAIR    BLD
COMPANY B   1     1     1       0
COMPANY D   4     2     2       1

...2013 年 3 月 1 日まで続きます。エンド ユーザーの好みに基づいて動的に日付を選択できるように再利用できるコードを別のページに既に配置しているため、3 月の日付は任意です。ここでサブクエリを使用する必要がありますか? 別の方法/順列で cfoutput/cfloop を使用していますか? いつものように、あなたの応答を楽しみにしており、事前に感謝します! :)

PS: ColdFusion 8 と SQL Server 2005 を使用しています。

4

2 に答える 2

0

実際には、cfoutputのgroup属性にかなり近いです。始めたことを終えなかっただけです。私はあなたがこのようなものが欲しいかもしれないと思います。

<cfoutput query="invall" group="dos">
    output data for this grouping
    <cfoutput group="company">
        output data for this grouping
        <cfoutput>
            output ungrouped data
        </cfoutput>
    </cfoutput>
</cfoutput>

クエリは、dos desc、companyによって注文する必要があります。

于 2013-03-13T13:30:10.643 に答える
0

重くなりすぎずに同様の結果が得られる HTML 操作のみのアプローチは次のとおりです。

<cfset variables.lastDate="">


<table border="1">
<tr>

    <th>Company</th>
    <th>UA</th>
    <th>Obs. UA</th>
    <th>BA</th>
    <th>Hair</th>
    <th>Blood</th>
    <th>DNA</th>
    <th>Pat.</th>
    <th>Phys.</th>
</tr>
<cfoutput query="invall">
<cfif not invall.dos is variables.lastdate>
    <tr><td colspan=9>#dateformat(invall.dos,"mm-dd-yyyy")#</td></tr>
</cfif>
<tr>

    <td>#invall.company#</td>
    <td>#invall.UACount#</td>
    <td>#invall.ObsCount#</td>
    <td>#invall.BACount#</td>
    <td>#invall.HairCount#</td>
    <td>#invall.BldCount#</td>
    <td>#invall.DNACount#</td>
    <td>#invall.PatCount#</td>
    <td>#invall.PhysCount#</td>
</tr>
<Cfset variables.lastdate=invall.dos>
</cfoutput>
</table>

グループ化が実用的でない過去に、そのようなサンプルを使用しました。

于 2013-03-13T12:43:44.170 に答える