如何加载一个查询(第一个数据源-2个表)中指定的所有数据和另一个查询(第二个数据源-1个表)中的一些数据?

jgwigjjp  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(270)

我是新来的,我更倾向于基础设施和服务器管理,但有时我不得不在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代码。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题