【发布时间】:2016-04-06 20:46:44
【问题描述】:
我正在尝试找出正确设置查询的最佳方法。基本上我有一个迷你表格询问locationEmployeeNameStartDate 和EndDate。不幸的是,我在两个无法链接的不同服务器上使用了两个 MS SQL Server 表。
我的目标是有 5 列
Associate Name |地点名称 |位置关联清单 |总位置清单 |关联百分比
我使用的主表是 cl_checklists:我使用的三列是 date,用于检查表单上所选日期之间的日期,associate 用于 EmployeeNames,trans_location 用于不同位置。
<cfset result = {} />
<cftry>
<cfset date1 = CREATEODBCDATETIME(form.StartDate & '00:00:00')>
<cfset date2 = CREATEODBCDATETIME(form.EndDate & '23:59:59')>
<cfquery datasource="#application.dsn#" name="GetEmployeeInfo">
SELECT *
FROM cl_checklists
WHERE date >= <cfqueryparam value="#date1#" cfsqltype="cf_sql_timestamp" />
AND date <= <cfqueryparam value="#date2#" cfsqltype="cf_sql_timestamp" />
AND trans_location IN ( <cfqueryparam value="#FORM.location#" cfsqltype="cf_sql_varchar" list="true" /> )
AND associate IN ( <cfqueryparam value="028,998,28" cfsqltype="cf_sql_varchar" list="true" /> )
</cfquery>
<cffunction name="getop_id" access="public" returntype="string">
<cfargument name="associate" >
<cfquery name="spitOutop_id" datasource="#application.userinfo_dsn#">
SELECT assoc_name
FROM dbo.tco_associates
WHERE assoc_id= #arguments.associate#
</cfquery>
<cfreturn spitOutop_id.assoc_name >
</cffunction>
<table border="1" id="Checklist_Stats">
<thead>
<th><strong>Associate Name</strong></th>
<th><strong>Location</strong></th>
<th><strong>Checklists Generated by Associate</strong></th>
<th><strong>Checklists Generated by Selected Location(s)</strong></th>
<th><strong>Associate Percentage of Location Total</strong></th>
</thead>
<tbody>
<cfquery name="allAssociatesQry" dbtype="query">
SELECT DISTINCT associate, COUNT(*) AS associateCount FROM GetEmployeeInfo GROUP BY associate ORDER BY associate
</cfquery>
<cfloop query="allAssociatesQry">
<cfset thisAssociateName = trim(allAssociatesQry.associate) />
<cfquery name="allLocCodeForAssociateQry" dbtype="query">
SELECT trans_location,count(trans_location) AS locCntr FROM GetEmployeeInfo WHERE associate='#thisAssociateName#' GROUP BY trans_location ORDER BY trans_location
</cfquery>
<cfoutput query="allLocCodeForAssociateQry">
<tr>
<td><strong>#thisAssociateName#</strong></td>
<!---<td><strong>#getop_id(192)#</strong></td>--->
<td>#allLocCodeForAssociateQry.trans_location#</td>
<td>#allLocCodeForAssociateQry.locCntr#</td>
<td>#allAssociatesQry.associateCount#</td>
<td>#NumberFormat((allLocCodeForAssociateQry.locCntr/allAssociatesQry.associateCount) * 100, '9.99')#%</td>
</tr>
<cfset thisAssociateName = "" />
</cfoutput>
</cfloop>
<tr>
<td><strong>Total</strong></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<cfcatch type="any">
<cfset result.error = CFCATCH.message >
<cfset result.detail = CFCATCH.detail >
</cfcatch>
</cftry>
我无法弄清楚如何更改我对第 4 列的查询,总计显示该位置的用户总清单,但我想要第 4 列中该位置的总清单。有人可以告诉我哪里出错了,以及如何找到这些位置的总数,而不是该位置的用户总数,该位置已经是第三列。
我可以在 add 之类的查询中进行查询吗
<cfquery datasource="#application.dsn#" name="GetLocationInfo">
SELECT *
FROM cl_checklists
WHERE date >= <cfqueryparam value="#date1#" cfsqltype="cf_sql_timestamp" />
AND date <= <cfqueryparam value="#date2#" cfsqltype="cf_sql_timestamp" />
AND trans_location IN ( <cfqueryparam value="#FORM.location#" cfsqltype="cf_sql_varchar" list="true" /> )
</cfquery>
然后在循环内添加另一个输出进行总计数?
【问题讨论】:
-
每当我在
<cfloop>中看到查询时,我都会头晕目眩。是否可以通过单个查询对所有数据进行四舍五入?也许有一个 JOIN? -
为什么无法链接两个数据库服务器?从技术上讲,这是可能的。
标签: sql-server coldfusion group-by cfquery