首页 > 解决方案 > 如何加载查询的一个查询(第一个数据源 - 2 个表)中指定的所有数据以及另一个查询(第二个数据源 - 1 个表)中的一些数据?

问题描述

我在这里是全新的,我更注重基础设施和服务器管理,但有时我必须在 ColdFusion 中为我们公司更改/创建一些小代码。

现在我有简单的任务,但代码非常复杂。

我有 2 个数据源(我们称它们为 DS1 和 DS2)。在 DS1 中,我有 2 个表(LLX - 负载表和 LLL - 负载部分表),我需要从中获取数据。我已经完成了 2 个查询,然后 QoQ 将它们放在一起,因为 LLL 表中有很多行来自 LLX 的每个“负载”,我需要它们的 SUM。

<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||TRNAVA || 852 || 536 || 没有 |
|11.8||1300||393210||莱比锡|| 698 || || 没有 |
|12.8||1100||393215||TRNAVA || 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 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>

我整整一周都在寻找一些知识,但我没有找到任何与这种情况完全相同的东西。我尝试使用 LEFT JOIN 而不是第一个 QoQ,但由于需要“sum(LLLQTY) as lqty”,QoQ 不会让我这样做。然后我尝试了这个代码的许多突变,但仍然没有运气,我真的很绝望。

你能告诉我如何得到正确的结果吗?我知道所有数据都是从两个数据库加载的,并且所有行都具有“加载编号”作为标识符(所有 3 个表中的加载编号都相同,但并非来自 DS1 的所有加载编号都在 DS2 中)。页面的其余部分只是一些 html 格式,所以我在这里发布的是我在那里拥有的所有 CF 代码。

标签: sqlcoldfusionleft-joinright-joinqoq

解决方案


推荐阅读