2012-03-01 9 views
1

にクエリ要素のリストを追加します。は、私は部品番号のリストを移入する部品番号のリストを作成し、クエリをループしています、単一の配列要素

<cfset binlist = "" > 
<cfset a = 1 /> 
    <cfloop query="getParts"> 
    <cfif a > 
     <cfset binlist = getParts.binnum> 
     <cfset a = 2 > 
    <cfelse> 
     <cfset binlist = binlist & "," & getParts.binnum > 
    </cfif> 
    </cfloop> 

私はbinlist要素を追加したいですスプレッドシートを設定するために配列の要素:

<cfset aColumns = [ partnum, shortchar08, partdescription, binlist, inventory.currinv , staged.stagedqty, alloc.allocqty, available, shelfCount, shipdtl.shipqty, getNumberofStores.numStores, tordered, APS, paddedLeadTime, LWM, storesRemain] /> 

<!---add the column data to the spreadsheet---> 
<cfset SpreadsheetAddRow(SpreadsheetObj, ArrayToList(aColumns)) /> 

1つの部分は複数のビンに入れることができます。私のCF出力ページでは動作しますが、部品の複数のビンを表示するために生成しようとしているスプレッドシートにはありません

生成されたスプレッドシートには、複数のビン。

+0

私はあなたがやろうとしている正確に何を以下のいませんよ? また、コードをhtmlで表示できる場合は、不正行為をして、htmlをcfcontentを使用してExcelに送信できます。 さらに、ループ内で他のロジックを実行したい場合は、最初のロジックがValueList()またはListAppend()を使用していることがあります。 – Busches

+0

応答のためにありがとう、ブッシュ、しかし、binnumは特定の部分に限定されていません。 – aparker81

答えて

2

あなたがしようとしていることは、Coldfusionのコードの1行だけです:

<cfset binList = ValueList(getParts.binnum) /> 

さらにコードを見ると、リストを配列に埋め込み、その配列をリストに変換しているように見えます。カンマで区切ったリストがある場合は、カンマで区切った別のリストの中央に置いてください。リストではなく、個々の要素として解釈されます。

それが大きなリストと混乱しないように、あなたがコンマ以外に、あなたの区切り文字を変更した場合に何が起こるかを参照してください:

<cfset binList = ValueList(getParts.binnum, ';') /> 

アップデート:

OK、私はあなたが持っている見ますパートグループ化の問題

<!--- loop over unique parts --> 
<cfoutput query="getParts" group="partnum"> 
    <cfset binlist = "" > 
    <!--- loop over bin numbers for each part ---> 
    <cfoutput> 
     <cfset binlist = ListAppend(binlist, getParts.binnum, ';') /> 
    </cfoutput> 
    <!--- do row level stuff here ---> 
    <cfset aColumns = [ partnum, shortchar08, partdescription, binlist, inventory.currinv , staged.stagedqty, alloc.allocqty, available, shelfCount, shipdtl.shipqty, getNumberofStores.numStores, tordered, APS, paddedLeadTime, LWM, storesRemain] /> 

    <!---add the column data to the spreadsheet---> 
    <cfset SpreadsheetAddRow(SpreadsheetObj, ArrayToList(aColumns)) /> 

</cfoutput> 

基本的に、CFOUTPUTとCFLOOPを混在させないでください。グループ化にCFOUTPUTを使用している場合、内部のグループ化を取得するには、内部CFOUTPUTが必要です(グループパラメータを引いたもの)。

+0

ハァ...ああ私にそれを打つ!正確に私の考え。 – bpanulla

+0

偉大な心、あなたは知っています。 ;) –

2

あなたは車輪を改革しています。 valuelist(getparts.binnum)は、すべてのループとチェックなしであなたのリストを提供します。または、少なくとも、あなたはコンマチェックのすべてを避けるために "listAppend()"を使用することができます:)

+0

ありがとう、マーク。私はこれを試しましたが、すべてのビンを引っ張って、ビンを特定のパーツナムに限定していないようです。 ' {cfset binlist =" "> ' – aparker81

+0

あなたのコードはそれらを制限しません...ループコードは単に手動で作成されたリストに部分numを追加します。 getPartsのpartnumをpartnum <> ''またはORで選択して、クエリのクエリを使用してみましょう。ここに条件を追加してください –

+0

私の更新答えを見てください。 –

1

クエリに単一の部分の行しか含まれていない場合は、おそらくValueList()関数がここに移動する方法です。あなたはSpreadSheetAddRowに渡すアレイ内の他のアイテムとは別にそれらを保つために、あなたのビンのリストについては、別の区切り文字を使用する必要があります。

<!--- Second argument uses space as delimiter ---> 
<cfset binlist = ValueList(getParts.binnum, " ") > 

<!---add the column data to the spreadsheet---> 
<!--- Explicitly use comma as delimiter ---> 
<cfset SpreadsheetAddRow(SpreadsheetObj, ArrayToList(aColumns, ",")) /> 

あなたがセットにクエリを分割する問題を抱えているようにも聞こえます部分的に。 QueryList(QoQ)を使用しないと、ValueListはあなたのためにそれをしません。あなたは既にグループ化されたCFOUTPUTを使用している場合は、単に構造体の一部/ binlistマッピングを集める:

<cfset part_bins = structNew()> 
<cfoutput query="getParts" group="partnum"> 
    <cfoutput> <!--- partnum group ---> 
    <cfif structKeyExists(part_bins, getParts.partnum)> 
     <cfset part_bins[getParts.partnum] = listAppend(part_bins[getParts.partnum], getParts.binnum, " ")> 
    <cfelse> 
     <cfset part_bins[getParts.partnum] = getParts.binnum> 
    </cfif> 
    <cfoutput> 
</cfloop> 

次に、あなたがあなたの配列を作る構造体からビンリストを引く:

<cfset aColumns = [ partnum, shortchar08, partdescription, 
    part_bins[partnum], inventory.currinv , staged.stagedqty, 
    alloc.allocqty, available, shelfCount, shipdtl.shipqty, 
    getNumberofStores.numStores, tordered, APS, paddedLeadTime, 
    LWM, storesRemain] /> 

パーツがビンを持たないケースを処理する必要があるかもしれません - それは、構造体のキー例外をスローします。

0

あなたは使用しているデータベースプラットフォームについては言及していませんが、SQLでの集約関数を使用してこの同じトリックを達成できます。たとえば、MySQLで:

SELECT partnum, GROUP_CONCAT(DISTINCT binnum SEPARATOR ' ') 
FROM Parts 
GROUP BY partnum 

同様の機能は、PostgreSQLに存在します。

array_to_string(array_agg(binnum),' ')