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

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

我是新来的,我更倾向于基础设施和服务器管理,但有时我不得不在coldfusion中为我们公司更改/创建一些小代码。
现在我有一个简单的任务,但是有非常复杂的代码。
我有两个数据源(我们称它们为ds1和ds2)。在ds1中,我有两个表(llx-负载表和lll-负载部件表),我需要从中获取数据。我已经完成了两个查询,然后qoq将它们集合在一起,因为lll表中有许多行用于来自llx的每个“加载”,我需要它们的总和。

  1. <cfquery datasource="TEST" name="get_load_2">
  2. SELECT llx.lxpron datetime, llx.lxload load, llx.lxadr2 destination, llx.lxasn asn, llx.lxstat stat, llx.lxshpt shipto, llx.lxsdte lxsdte
  3. FROM XXX.XXX.LLX LLX
  4. WHERE llx.lxfacl='07' and llx.lxpron >'' and llx.lxasn = '' and llx.lxload > 392700 and llx.lxwhse <> 'F3'
  5. <cfif IsDefined("from")>and llx.lxsdte>='#from#'</cfif>
  6. <cfif IsDefined("to")>and llx.lxsdte<='#to#'</cfif>
  7. ORDER BY right(llx.lxpron,8), left(llx.lxpron,5), right(llx.lxpron,10), left(llx.lxpron,4)
  8. </cfquery>
  9. <cfquery datasource="TEST" name="get_load_3">
  10. SELECT sum(LLLQTY) as lqty, lll.llload lload
  11. FROM XXX.XXX.LLL LLL
  12. WHERE lll.llfacl='07' and lll.llload > 392700 and lll.llwhse <> 'F3'
  13. <cfif IsDefined("from")>and lll.llsdte>='#from#'</cfif>
  14. <cfif IsDefined("to")>and lll.llsdte<='#to#'</cfif>
  15. GROUP BY lll.llload
  16. </cfquery>
  17. <cfquery name="test" dbtype="query">
  18. SELECT *
  19. FROM get_load_2, get_load_3
  20. WHERE get_load_3.lload = get_load_2.load
  21. </cfquery>

这样做的结果是一个简单的表,其中包含所有选定的负载和每个负载中所需部分的总和。效果很好。现在是最困难的部分。我需要从ds2加载数据,这是我对这个查询所做的:

  1. <cfquery datasource="ADC" name="ADC_get_PICK_SUM">
  2. SELECT PICK.LOADNO LOADNO, sum(QUANTITY) SUM
  3. FROM ADC.ADC.PICK PICK
  4. where PICK.LOADNO > '392700'
  5. GROUP BY pick.loadno
  6. </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中的某些加载没有数据,因为它们未被“扫描”,并且我需要此字段为空。实际上,我甚至不需要显示数字,因为我会比较它们,只有在没有扫描、部分扫描或全部扫描的情况下才改变表的颜色。但不管我做什么,我最终只列出了两个数据源中负载号匹配的负载。
我用这个连接两个数据源:

  1. <cfset QueryAddRow(test) />
  2. <cfquery name="GetJoinedData" dbtype="query" >
  3. SELECT *
  4. FROM ADC_get_PICK_SUM, test
  5. WHERE ADC_get_PICK_SUM.LOADNO = test.load
  6. ORDER BY datetime
  7. </cfquery>

然后我有一张简单的table:

  1. <table class="back" bgcolor="grey" cellpadding="1" cellspacing="1" border=0 align="center">
  2. <tr bgcolor="Silver">
  3. <th>Date</th>
  4. <th>Time</th>
  5. <th>Load</th>
  6. <th>Destination</th>
  7. <th>Ship to</th>
  8. <th>Status</th>
  9. <th>Scanned</th>
  10. <th></th>
  11. <th>Closed</th>
  12. </tr>
  13. <cfoutput query="getjoineddata">
  14. <tr bgcolor="white">
  15. <td>#right(datetime,10)#</td>
  16. <td>#left(datetime,4)#</td>
  17. <td>#load#</td>
  18. <td>#destination#</td>
  19. <td>#shipto#</td>
  20. <td>#lqty#</td>
  21. <td>#SUM#</td>
  22. <td>#LOADNO#</td>
  23. <cfif stat eq 0> <td bgcolor="red"></td>
  24. <cfelseif stat gt 1> <td bgcolor="green"></td>
  25. <cfelse> <td>#stat#</td>
  26. </cfif>
  27. </tr>
  28. </cfoutput>
  29. </table>

我花了整整一周的时间寻找一些知识,但是我没有找到任何和这个案子完全一样的东西。我试着用左连接代替第一个qoq,但是由于需要“sum(lllqty)as lqty”,qoq不会让我这么做。然后我尝试了许多代码的突变,但仍然没有运气,我真的很绝望。
你能告诉我如何得到正确的结果吗?我知道所有的数据都是从两个数据库中加载的,并且所有的行都有“loadnumber”作为标识符(loadnumber在所有3个表中都是相同的,但不是所有来自ds1的loadnumber都在ds2中)。页面的其余部分只是一些html格式,所以我在这里发布的是所有的cf代码。

暂无答案!

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

相关问题