2个单独表的SUM

时间:2015-09-08 16:45:44

标签: mysql sql oracle phpmyadmin

我有2张桌子

表1

ID  TYPE MONTH QTY
1   I6    1     5
2   I5    2     5
3   I4    1     5
4   I6    2     5

表2

ID  TYPE MONTH QTY
1   I6    1     5
2   I5    1     5
3   I5    2     5

期望的输出(两个表的总和)

TYPE MONTH1QTY MONTH2QTY
IP4    5          0
IP6    10         5
IP5    5          10

我怎样才能做到这一点?

提前致谢。

1 个答案:

答案 0 :(得分:1)

因为这两个表的格式相同,所以使用UNION ALL NOT 只是UNION将两个表放在一起是微不足道的,因为这会对数据进行重复数据删除套)

然后,您可以使用SUM(CASE WHEN)来转移数据。

SELECT
  type,
  SUM(CASE WHEN month = 1 THEN qty END)   AS month_1_qty,
  SUM(CASE WHEN month = 2 THEN qty END)   AS month_2_qty
FROM
(
    SELECT * FROM table1
    UNION ALL
    SELECT * FROM table2
)
   unified_table
GROUP BY
    type

请注意,如果没有动态SQL,您必须硬编码要查询的月份。 (您不能仅仅因为数据中出现新月而无法获得额外的列。

在这种情况下,您不知道要查询的月份,请将数据保持为标准化格式,然后在应用程序/表示层中进行转动。

SELECT
  type,
  month,
  SUM(qty)   AS qty
FROM
(
    SELECT * FROM table1
    UNION ALL
    SELECT * FROM table2
)
   unified_table
GROUP BY
    type,
    month

如果每个表中都有不同的字段,请在UNION ALL中更具体一些。

(
    SELECT type, month, qty FROM table1
    UNION ALL
    SELECT type, month, qty FROM table2
)