Yes good question,
Let me explain further:
I didnt add that there is a sort order for each value and a grouping order.
The output from the query without doing the xml output is this:
FailureMode Value Group SortOrder
Operation1 100 1 1
Operation2 350 2 2
Operation3 50 3 3
Operation4 120 3 4
Operation5 60 3 5
What i need to acheive is outputting the results to produce the following xml.
(This creates a stacked graph)
Group1
<set value=100>
<set value="">
<set value="">
Group2
<set value="">
<set value="350">
<set value="">
Group3
<set value="">
<set value="">
<set value="50">
Group3
<set value="">
<set value="">
<set value="120">
Group3
<set value="">
<set value="">
<set value="60">
To create a stack on the group 3 it is important to place the values in the correct location on the output. i.e. Each result on group 3 is on the third row.
Now this needs to be dynamic so any group of results will get stacked.
Is this possible to achieve or do i need to store something else in the results table to produce the desired output?
I have managed to get so far using the rownumber to determine postioning, what i can't figure out is how to place the grouped values in on location so that it produces the stack.
Its a bit messy using loops but i cant figure out any other way right now.
Here's what i have so far with queries:
<cfquery datasource="UKCHAPP145" name="Q1">
SELECT
SUM(TBL_RESULTS.FTBR_UNIT_QTY) AS TotalFailedQty,
TBL_RESULTS.FTBR_OPERATION_GROUPING_UUID,
TBL_RESULTS.FTBR_OPERATION_UUID,
TBL_OPERATION_GROUPING.OPERATION_GROUP_NAME,
TBL_OPERATION_GROUPING.OPERATION_GROUP_SORT_ORDER
FROM
UKCHAPP145.TBL_RESULTS,
UKCHAPP145.TBL_OPERATION_GROUPING
WHERE
TBL_RESULTS.FTBR_PASS_OR_FAIL = <cfqueryparam value="0" cfsqltype="cf_sql_integer" >
AND
TBL_RESULTS.FTBR_OPERATION_GROUPING_UUID = TBL_OPERATION_GROUPING.OPERATION_GROUP_UUID(+)
AND
TBL_RESULTS.FTBR_DATE BETWEEN <cfqueryparam value="#FORM.START_DATE#" cfsqltype="cf_sql_date">
AND
<cfqueryparam value="#FORM.END_DATE#" cfsqltype="cf_sql_date">
GROUP BY
TBL_RESULTS.FTBR_OPERATION_GROUPING_UUID,
TBL_RESULTS.FTBR_OPERATION_UUID,
TBL_OPERATION_GROUPING.OPERATION_GROUP_NAME,
TBL_OPERATION_GROUPING.OPERATION_GROUP_SORT_ORDER
</cfquery>
<cfquery datasource="UKCHAPP145" name="Q2">
SELECT
SUM(FTBR_UNIT_QTY) AS TotalPassedQty,
TBL_RESULTS.FTBR_OPERATION_GROUPING_UUID,
TBL_RESULTS.FTBR_OPERATION_UUID
FROM
TBL_RESULTS
WHERE
TBL_RESULTS.FTBR_HEADER_UUID = <cfqueryparam value="#FORM.HEADER_UUID#" cfsqltype="cf_sql_varchar">
AND
TBL_RESULTS.FTBR_PASS_OR_FAIL = <cfqueryparam value="1" cfsqltype="cf_sql_integer" >
AND
TBL_RESULTS.FTBR_DATE BETWEEN <cfqueryparam value="#FORM.START_DATE#" cfsqltype="cf_sql_date">
AND
<cfqueryparam value="#FORM.END_DATE#" cfsqltype="cf_sql_date">
GROUP BY
TBL_RESULTS.FTBR_OPERATION_GROUPING_UUID,
TBL_RESULTS.FTBR_OPERATION_UUID
</cfquery>
<cfquery dbtype="query" name="Q3">
SELECT
SUM(100*(1-(Q1.TOTALFAILEDQTY /(Q2.TOTALPASSEDQTY + Q1.TOTALFAILEDQTY)))) AS QualityRate,
Q1.FTBR_OPERATION_GROUPING_UUID,
Q1.FTBR_OPERATION_UUID,
Q1.OPERATION_GROUP_NAME
FROM
Q1,
Q2
WHERE
Q1.FTBR_OPERATION_UUID = Q2.FTBR_OPERATION_UUID
GROUP BY
Q1.FTBR_OPERATION_UUID,
Q1.FTBR_OPERATION_GROUPING_UUID,
Q1.OPERATION_GROUP_NAME
ORDER BY
Q1.OPERATION_GROUP_SORT_ORDER
ASC
</cfquery>
<cfquery dbtype="query" name="Q4">
SELECT
Q1.FTBR_OPERATION_GROUPING_UUID,
Q1.OPERATION_GROUP_NAME
FROM
Q1,
Q2
WHERE
Q1.FTBR_OPERATION_GROUPING_UUID = Q2.FTBR_OPERATION_GROUPING_UUID
GROUP BY
Q1.FTBR_OPERATION_GROUPING_UUID,
Q1.OPERATION_GROUP_NAME
ORDER BY
Q1.OPERATION_GROUP_SORT_ORDER
ASC
</cfquery>
<cfset strXML = strXML & "<categories> " >
<cfloop query="Q4">
<cfset strXML = strXML & "<category label='#Q4.OPERATION_GROUP_NAME#'/>" >
</cfloop>
<cfset strXML = strXML & "</categories> " >
<cfoutput group="FTBR_OPERATION_GROUPING_UUID" query="Q3">
<cfset strXML = strXML & "<dataset seriesName='#Q3.OPERATION_GROUP_NAME#' showValues='0'>" >
<cfset CurrentRowStart = #currentrow# -1>
<cfset CurrentRowContinue = #currentrow# +1>
<cfloop from="1" to="#CurrentRowStart#" index="i">
<cfset strXML = strXML & "<set value=''/> " >
</cfloop>
<cfset strXML = strXML & "<set value='#Round(Q3.QUALITYRATE)#'/>" >
<cfloop from="#CurrentRowContinue#" to="#Q3.recordcount#" index="i">
<cfset strXML = strXML & "<set value=''/> " >
</cfloop>
<cfset strXML = strXML & "</dataset>" >
</cfoutput>
<!--- Finally, close <chart>
element --->
<cfset strXML = strXML & "</chart> " >
JM