0

表格1

prodUID (*)    plantID   ItemName   size     qty
   1              1      car        med       5
   2              1      car        small     2
   3              1      car        large     8
   4              1      truck      small     7
   5              1      truck      med       0
   6              1      truck      large     4
   7              1      van        small     0
   8              2      truck      large    10

表2

UID(*)  plantID  table2_plan_tid  table2_prodUID  itemname  size     num    wk
------------------------------------------------------------------------------
  1        1          1              car                    med        3    41
  2        1          2              car                    small      0    42    
  3        1          3              car                    large      6    41
  4        1          4              truck                  small      1    44
  5        1          5              truck                  med       10    45    
  6        1          6              truck                  large      1    43
  7        1          7              van                    small      7    42
  8        2          8              car                    med       10    41

表3

UID(*)  plantid  table3_wk  table3_prodUID  itemName  size     qty
------------------------------------------------------------------
  1        1        41           2          car       med       5
  2        1        41           3          car       large     7
  3        1        43           7          van       small     8

我想要得到的结果是

  • 对于植物 = ? 和 wk 之间?和 ?
  • Plantid = 1 和 wk 在 41 和 45 之间

  • 表 1 在植物 ID 上的总和数量

  • 对植物 ID 和数周的表 2 求和 wk
  • 表上的总数量与植物 ID 和数周

以及一些如何将其与连接或子查询联系起来以获取

plantid  Itemname  qty   num   order
------------------------------------
   1     car        15    9     12
   1     truck      11   12      0
   1     van         0    7      8

我似乎无法得到正确的结果

我还考虑在所有表中放入一个 itemNameID 字段

如果那会让事情变得更容易

4

1 回答 1

0

您可以使用此查询来实现您想要的:

SELECT table1.plantID, table1.ItemName, SUM(table1.qty), COALESCE(t2.num_sum, 0), COALESCE(t3.qty_sum, 0)
FROM table1
LEFT JOIN (SELECT plantid, itemname, SUM(num) AS num_sum
      FROM table2
      WHERE wk >= 41 AND wk <= 45
      GROUP BY plantID, itemname) t2 ON table1.plantID = t2.plantID AND table1.ItemName = t2.ItemName
LEFT JOIN (SELECT plantid, itemname, SUM(qty) AS qty_sum
      FROM table3
      WHERE table3_wk >= 41 AND table3_wk <= 45
      GROUP BY plantID, itemname) t3 ON table1.plantID = t3.plantID AND table1.ItemName = t3.ItemName
WHERE table1.plantid = 1
GROUP BY plantID, ItemName

又见直播!

基本上,你加入 3 个查询以获得你想要的。如果您尊重与列名的某种和谐,那会更干净一些。

于 2013-10-19T20:17:32.083 回答