【问题标题】:How to get the Sum from three tables? [duplicate]如何从三个表中获取总和? [复制]
【发布时间】:2012-08-30 00:47:53
【问题描述】:

可能重复:
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

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

【问题讨论】:

标签: sql tsql


【解决方案1】:

嗯……

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】:

    使用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
    

    【讨论】:

      【解决方案3】:

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

      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
      

      干杯!

      【讨论】:

        猜你喜欢
        • 2020-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多