多个表中的SQL求和和链接字段

时间:2013-10-19 15:43:11

标签: sql

表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

我想要的结果是

  • for plantid =?和之间的?和?
  • plantid = 1且在41到45之间

  • 对于plantID上的table1总和数量

  • 对于plantID上的table2和周数的总结
  • 使用on plantID和表格
  • 在表格上加上数量

以及如何将其与连接或子查询链接以获取

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

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

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

如果这样会更容易

1 个答案:

答案 0 :(得分: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

See also live!

基本上,您加入3个查询以获得所需内容。 如果您尊重某个和谐与列名称,那将会更加清晰。