我是新来的,我更倾向于基础设施和服务器管理,但有时我不得不在coldfusion中为我们公司更改/创建一些小代码。
现在我有一个简单的任务,但是有非常复杂的代码。
我有两个数据源(我们称它们为ds1和ds2)。在ds1中,我有两个表(llx-负载表和lll-负载部件表),我需要从中获取数据。我已经完成了两个查询,然后qoq将它们集合在一起,因为lll表中有许多行用于来自llx的每个“加载”,我需要它们的总和。
<cfquery datasource="TEST" name="get_load_2">
SELECT llx.lxpron datetime, llx.lxload load, llx.lxadr2 destination, llx.lxasn asn, llx.lxstat stat, llx.lxshpt shipto, llx.lxsdte lxsdte
FROM XXX.XXX.LLX LLX
WHERE llx.lxfacl='07' and llx.lxpron >'' and llx.lxasn = '' and llx.lxload > 392700 and llx.lxwhse <> 'F3'
<cfif IsDefined("from")>and llx.lxsdte>='#from#'</cfif>
<cfif IsDefined("to")>and llx.lxsdte<='#to#'</cfif>
ORDER BY right(llx.lxpron,8), left(llx.lxpron,5), right(llx.lxpron,10), left(llx.lxpron,4)
</cfquery>
<cfquery datasource="TEST" name="get_load_3">
SELECT sum(LLLQTY) as lqty, lll.llload lload
FROM XXX.XXX.LLL LLL
WHERE lll.llfacl='07' and lll.llload > 392700 and lll.llwhse <> 'F3'
<cfif IsDefined("from")>and lll.llsdte>='#from#'</cfif>
<cfif IsDefined("to")>and lll.llsdte<='#to#'</cfif>
GROUP BY lll.llload
</cfquery>
<cfquery name="test" dbtype="query">
SELECT *
FROM get_load_2, get_load_3
WHERE get_load_3.lload = get_load_2.load
</cfquery>
这样做的结果是一个简单的表,其中包含所有选定的负载和每个负载中所需部分的总和。效果很好。现在是最困难的部分。我需要从ds2加载数据,这是我对这个查询所做的:
<cfquery datasource="ADC" name="ADC_get_PICK_SUM">
SELECT PICK.LOADNO LOADNO, sum(QUANTITY) SUM
FROM ADC.ADC.PICK PICK
where PICK.LOADNO > '392700'
GROUP BY pick.loadno
</cfquery>
有“实际扫描数量”的加载,但并不是所有的加载都是我从ds1上一次查询得到的,因为它们还没有启动。
现在我需要把所有这些信息放在一起,然后把结果放到如下表中:
|日期| |时间| | 负载 ||目的地| |需要| |扫描| |关闭|
|10.8 | | 1000 | | 393206 | |莱比锡 || 755 || 755 || 是的|
|10.8 | | 1200 | | 393207 | |特纳瓦 || 852 || 536 || 没有|
|11.8 | | 1300 | | 393210 | |莱比锡 || 698 || || 没有|
|12.8 | | 1100 | | 393215 | |特纳瓦 || 350 || || 没有|
以此类推,但我无法创建包含ds1中所有数据和ds2中仅有几行数据的表,因为ds1中的某些加载没有数据,因为它们未被“扫描”,并且我需要此字段为空。实际上,我甚至不需要显示数字,因为我会比较它们,只有在没有扫描、部分扫描或全部扫描的情况下才改变表的颜色。但不管我做什么,我最终只列出了两个数据源中负载号匹配的负载。
我用这个连接两个数据源:
<cfset QueryAddRow(test) />
<cfquery name="GetJoinedData" dbtype="query" >
SELECT *
FROM ADC_get_PICK_SUM, test
WHERE ADC_get_PICK_SUM.LOADNO = test.load
ORDER BY datetime
</cfquery>
然后我有一张简单的table:
<table class="back" bgcolor="grey" cellpadding="1" cellspacing="1" border=0 align="center">
<tr bgcolor="Silver">
<th>Date</th>
<th>Time</th>
<th>Load</th>
<th>Destination</th>
<th>Ship to</th>
<th>Status</th>
<th>Scanned</th>
<th></th>
<th>Closed</th>
</tr>
<cfoutput query="getjoineddata">
<tr bgcolor="white">
<td>#right(datetime,10)#</td>
<td>#left(datetime,4)#</td>
<td>#load#</td>
<td>#destination#</td>
<td>#shipto#</td>
<td>#lqty#</td>
<td>#SUM#</td>
<td>#LOADNO#</td>
<cfif stat eq 0> <td bgcolor="red"></td>
<cfelseif stat gt 1> <td bgcolor="green"></td>
<cfelse> <td>#stat#</td>
</cfif>
</tr>
</cfoutput>
</table>
我花了整整一周的时间寻找一些知识,但是我没有找到任何和这个案子完全一样的东西。我试着用左连接代替第一个qoq,但是由于需要“sum(lllqty)as lqty”,qoq不会让我这么做。然后我尝试了许多代码的突变,但仍然没有运气,我真的很绝望。
你能告诉我如何得到正确的结果吗?我知道所有的数据都是从两个数据库中加载的,并且所有的行都有“loadnumber”作为标识符(loadnumber在所有3个表中都是相同的,但不是所有来自ds1的loadnumber都在ds2中)。页面的其余部分只是一些html格式,所以我在这里发布的是所有的cf代码。
暂无答案!
目前还没有任何答案,快来回答吧!