1

我对此进行了很多研究,但还没有找到我正在寻找的答案。我能够在一点帮助下达到这一点,但现在又遇到了另一个障碍。

我希望能够在最左边的列下显示所有唯一的公司名称,然后是在特定月份内进行的每种类型的测试数量的“统计”。我已经注释掉了我的一些代码,虽然它可以工作,但没有考虑到特定测试的数量何时等于 0(db 中没有符合条件的记录),如果没有别的,这是需要的确保其他测试不会混淆他们的“计数”。我的代码可能有助于详细说明:

<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>

当值等于 0 时,注释部分不会在屏幕上打印“0” structKey,目前,如果一家公司有 0 个 UA 但有 2 个 BA,则 UA 下的单元格显示 2 而 BA 什么都没有。所以我的<cfif>陈述也有问题,但我不确定是什么。请理解我刚刚开始学习 ColdFusion,我在这个特定页面上的大部分内容来自另一个论坛上的另一种灵魂的帖子。我期待您的回复和输入,在此先感谢!

PS 快速编辑:当我使用<cfdump>上述方法时,输出是 1 个对具有 1 个此类记录的公司的整体查询,对company="#i#" AND test_type="UA"具有 2 个此类记录的公司的 2 个查询,如果有 3 个匹配记录则为 3 个查询,依此类推。最终希望这个查询只为每家公司运行一次"#i#",然后拉出s[i][j].recordcount(无论它不等于 0),这样我就可以将它与不同的表(费用表)进行比较,并生成一个总金额来向每家公司开具账单关于执行的测试数量,如果这有意义的话,但我需要先过这座桥。

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 回答