1

companyIDといくつかの関連するスコアを含むテーブル「スコア」があります。companyIDは、このテーブルに複数回表示される可能性があります。companyIDとcompanyNameを含む別のテーブル('company')があります。私がやりたいのは、「company」テーブルにクエリを実行してすべてのcompanyIDを取得し、この結果を使用して、前のクエリの結果を使用して「scores」テーブルにスコアをクエリすることです。私もいくつかの計算をする必要があります。最初の結果セットをループして、companyID値を2番目のクエリに配置する必要があると考えています。これを行う方法がわからない。どんな助けでも大歓迎です。

私はこのコードが機能しないことを知っていますが、それは私が達成しようとしていることの感覚をあなたに与えるかもしれません:

<cfquery name="companyIDs" datasource="myDB">
   Select companyID from company
</cfquery>

<cfloop>
 <cfquery name="companyScore" datasource="myDB">
 SELECT Round(sum(leadership)/Count(leadership)) as leadership,   
 Round(sum(communication)/Count(communication)) as communication, 
 Round(sum(fairness)/Count(fairness)) as fairness, 
 Round(sum(ethics)/Count(ethics)) as ethics, 
 Round(sum(competence)/Count(competence)) as competence 
 FROM scores 
 Where companyID = 'companyIDs.companyID'
 </cfquery>
</cfloop>

よりも

4

2 に答える 2

4

これを行うにはいくつかの方法がありますが、以下の方法で機能します。

<cfquery name="companyIDs" datasource="myDB">
Select companyID from company
</cfquery>

<cfloop query="companyIDs">
 <cfquery name="companyScore" datasource="myDB">
 SELECT Round(sum(leadership)/Count(leadership)) as leadership,   
 Round(sum(communication)/Count(communication)) as communication, 
 Round(sum(fairness)/Count(fairness)) as fairness, 
 Round(sum(ethics)/Count(ethics)) as ethics, 
 Round(sum(competence)/Count(competence)) as competence 
 FROM scores 
 Where companyID = #companyIDs.companyID#
 </cfquery>
</cfloop>

2つのクエリを結合することもできるので、全体的なクエリは1つだけです。これが、推奨される方法です。

<cfquery name="companyScore" datasource="myDB">
 SELECT companyID,
 Round(sum(leadership)/Count(leadership)) as leadership,   
 Round(sum(communication)/Count(communication)) as communication, 
 Round(sum(fairness)/Count(fairness)) as fairness, 
 Round(sum(ethics)/Count(ethics)) as ethics, 
 Round(sum(competence)/Count(competence)) as competence 
 FROM scores INNER JOIN company ON scores.companyID = company.companyID
 GROUP BY companyID
 </cfquery>
于 2012-11-07T20:53:49.393 に答える
0

あなたが必要とすることを達成するためのより良い方法がありますが、私はあなたがそれを尋ねたときにあなたの質問に答えました。私はあなたのコードにいくつかの変更を加えました:

<cfloop query='companyIDs'> // add the name of your query to the cloop
 <cfquery name="companyScore" datasource="myDB">
 SELECT Round(sum(leadership)/Count(leadership)) as leadership,   
 Round(sum(communication)/Count(communication)) as communication, 
 Round(sum(fairness)/Count(fairness)) as fairness, 
 Round(sum(ethics)/Count(ethics)) as ethics, 
 Round(sum(competence)/Count(competence)) as competence 
 FROM scores 
 Where companyID = '#companyIDs.companyID#' // add ## around your output
 </cfquery>

<cfdump var='#companyScore#'>  // dump your results

</cfloop>
于 2012-11-07T20:57:12.833 に答える