2个单独表格的总和
SUM of 2 separate tables
我下面有 2 个表格
Table 1
ID TYPE MONTH QTY
1 I6 1 5
2 I5 2 5
3 I4 1 5
4 I6 2 5
Table 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
我怎样才能做到这一点?
提前致谢。
因为两个 table 的格式相同,所以使用 UNION ALL
(NOT[= 将两个 table 放在一起很简单30=] 只是 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,您必须对要查询的月份进行硬编码。 (您不能仅仅因为数据中出现了新的月份就出现额外的列 'magically'。)
在您不知道要查询哪个月份的情况下,将数据保持为规范化形式,然后在您的应用程序/表示层中进行数据透视。
SELECT
type,
month,
SUM(qty) AS qty
FROM
(
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
)
unified_table
GROUP BY
type,
month
如果每个 table 中有不同的字段,请在 UNION ALL
中更具体一些。
(
SELECT type, month, qty FROM table1
UNION ALL
SELECT type, month, qty FROM table2
)
我下面有 2 个表格
Table 1
ID TYPE MONTH QTY
1 I6 1 5
2 I5 2 5
3 I4 1 5
4 I6 2 5
Table 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
我怎样才能做到这一点?
提前致谢。
因为两个 table 的格式相同,所以使用 UNION ALL
(NOT[= 将两个 table 放在一起很简单30=] 只是 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,您必须对要查询的月份进行硬编码。 (您不能仅仅因为数据中出现了新的月份就出现额外的列 'magically'。)
在您不知道要查询哪个月份的情况下,将数据保持为规范化形式,然后在您的应用程序/表示层中进行数据透视。
SELECT
type,
month,
SUM(qty) AS qty
FROM
(
SELECT * FROM table1
UNION ALL
SELECT * FROM table2
)
unified_table
GROUP BY
type,
month
如果每个 table 中有不同的字段,请在 UNION ALL
中更具体一些。
(
SELECT type, month, qty FROM table1
UNION ALL
SELECT type, month, qty FROM table2
)