3

嗨,我刚刚学习 SQL,我正在尝试从多个表中检索一些数据,但无法让它显示我想要的方式,所以我只是想知道这是否可能,如果可以,有人可以建议一种方法,见下文:

    Table1:                     Table2:                     Table3

    Package       Licenses      Package       Licenses      Package      Licenses
    ======================      ======================      =====================
    Product1         20         Product1         15         Product1        0
    Product2         15         Product2         5          Product2        5
    Product3         10         Product3         10         Product3        0

我希望根据包名称将许可证列中的值相互添加,并尽可能显示如下内容:

    Package       Licenses
    ======================
    Product1         35
    Product2         25
    Product3         20

如果有人可以让我知道如何做到这一点,如果这样的事情是可能的,请告诉我。

4

3 回答 3

2

这是您需要研究的UNION ALL条款和GROUP BY陈述。

解决方案的要点是

  • 使用 a 组合所有表中的所有行UNION ALL
  • 将结果放入子选择中
  • 通过对子选择的结果使用 aGROUP BYSUM聚合函数来计算许可证总数

SQL 语句

SELECT Package, SUM(Licenses) AS Licenses
FROM   (
         SELECT Package, Licenses FROM Table1 UNION ALL
         SELECT Package, Licenses FROM Table2 UNION ALL
         SELECT Package, Licenses FROM Table3
       ) t
GROUP BY
       Package
于 2012-08-06T09:26:12.153 回答
1

尝试这个:

SELECT Package, SUM(Licences) as TotalLicences
  FROM (
        SELECT Package, Licences FROM Table1
         UNION ALL
        SELECT Package, Licences FROM Table2
         UNION ALL
        SELECT Package, Licences FROM Table3
       ) AS AllLicences
 GROUP BY Package
于 2012-08-06T09:28:15.847 回答
0

您可以使用 aunion创建所有许可证的视图,sum它们:

select  Package
,       sum(Licences) as Licences
from    (
        select  Package
        ,       Licences
        from    Table1
        union all
        select  Package
        ,       Licences
        from    Table2
        union all
        select  Package
        ,       Licences
        from    Table3
        ) as SubQueryAlias
group by
        Package
于 2012-08-06T09:27:19.793 回答