Sql server 在不使用聚合函数的情况下按多列分组,还是使用cfoutput/cfloop分组?

Sql server 在不使用聚合函数的情况下按多列分组,还是使用cfoutput/cfloop分组?,sql-server,coldfusion,coldfusion-8,Sql Server,Coldfusion,Coldfusion 8,我仍在学习如何以我想要的方式从查询中获取我的结果组。我在网上看过很多例子,但没有一个完全符合我的需要。我正在寻找一种最直接的方法,从表中提取一组具有特定日期范围的记录,按公司名称进行子筛选,然后按测试类型字段的计数进行子筛选。它需要是动态的(在测试类型上是非动态的;这些是设置好的,不会改变),因为公司的数量在不断增长。这个问题与我一个月前在这里发布的另一个问题非常相似,只是现在我需要进一步(超级?)按服务日期(字段名“dos”)过滤我的结果。这是我当前的代码(非工作;错误w/“donor_log

我仍在学习如何以我想要的方式从查询中获取我的结果组。我在网上看过很多例子,但没有一个完全符合我的需要。我正在寻找一种最直接的方法,从表中提取一组具有特定日期范围的记录,按公司名称进行子筛选,然后按测试类型字段的计数进行子筛选。它需要是动态的(在测试类型上是非动态的;这些是设置好的,不会改变),因为公司的数量在不断增长。这个问题与我一个月前在这里发布的另一个问题非常相似,只是现在我需要进一步(超级?)按服务日期(字段名“dos”)过滤我的结果。这是我当前的代码(非工作;错误w/“donor_log.company”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。“)

…等等,直到2013年1月3日。我已经在不同的页面上准备好了代码,我可以重用这些代码,以便根据最终用户的偏好进行动态日期选择,因此三月日期是任意的。我应该在这里使用子查询吗?以不同的方式使用cfoutput/cfloop/排列?期待您的回复并提前感谢(总是如此!)


PS:使用ColdFusion 8和SQL Server 2005。

一种只需对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>

单位
UA
Obs.UA
文学士
头发
血
脱氧核糖核酸
拍打
物理。
#日期格式(无效,年月日)#
#无效公司#
#无效人数#
#残废#
#残废的#
#无效的#
#无效提单#
#无效帐户#
#伤残病人#
#伤残者#

我以前使用过这样一个示例,其中分组是不实际的。

您实际上与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进行排序。

我知道您在那里做了什么……一个人工循环。我认为我的主要问题是SQL语句。我不理解A)我需要一个“HAVING”子句而不是“WHERE”,B)需要根据非聚合函数进行分组和排序(请原谅我的英语)我选择的字段是“dos”和“company”。这是一个很好的技巧,可以减轻SQL负载,我以后一定会记住。注意,Steve。谢谢Dan,这就是我一直在寻找的…我还发现,在进行了一些绝望的谷歌搜索后,我需要一个“HAVING”而不是“WHERE”。我想我是misunderstanding,认为只有最高层的家长才能拥有一个群体,显然情况恰恰相反,只有最底层的孩子标签才能拥有一个群体……我很感激,丹!:)
<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>
<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>