如何从三个表中获得总和?

时间:2012-08-30 00:47:54

标签: sql tsql

  

可能重复:
  How to get Sum from two tables?

我有三张桌子“products”第二张“items”第三张“sales” 第一个和第二个表具有相同的列(“code”,“quantity”,但第三个表具有(“code”,“name”)现在我想要从第一个和第二个的数量,但也想从第三个表得到相同的代码名称。 检查我的代码

Select code, sum(qtd),name
from (           select a.code, a.qtd from product a
       union all select b.code, b.qtd from items   b
       union all select c.name        from sales   c where b.code=c.code
     )
group by code

前两个给了我完美的价值,但第三个小说给出了错误而不显示名字。

3 个答案:

答案 0 :(得分:0)

使用UNION时,请确保要合并的列与每个SELECT语句匹配。前两个SELECT语句工作正常,因为它们具有相同的列数。第三个失败,因为它只有一列。


以下是使用UNION组合两个(或更多)查询的结果集的基本规则:

  • 所有查询中列的数量和顺序必须相同。
  • 数据类型必须兼容。

从您的查询中,我认为您想要这样,

SELECT  a.code, b.name, SUM(a.qtd) totalSUM
FROM    product a
            INNER JOIN sales b
                ON a.code = b.code
GROUP BY a.code, b.name
UNION
SELECT  a.code, b.name, SUM(a.qtd) totalSUM
FROM    items a
            INNER JOIN sales b
                ON a.code = b.code
GROUP BY a.code, b.name

答案 1 :(得分:0)

...坎

SELECT
  sales.name,
  (SELECT SUM(products.quantity) FROM products WHERE products.code = sales.code) as products.quantity,
  (SELECT SUM(items.quantity) FROM items WHERE items.code = sales.code) as items_quantity,
FROM sales

答案 2 :(得分:0)

我认为你想做这样的事情,虽然不清楚实际要求是什么:

select code = t1.code ,
       name = t2.name ,
       qtd  = t1.qtd 
from ( select code =      t.code   ,
              qtd  = sum( t.qtd  )
       from (           select a.code, a.qtd from product a
              union all select b.code, b.qtd from items   b
            ) t
       group by t.code
     ) t1
join sales t2 where t2.code = t1.code

干杯!