首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个表合并为一个输出SQL

将两个表合并为一个输出SQL
EN

Stack Overflow用户
提问于 2012-11-24 14:58:12
回答 3查看 863关注 0票数 1

我有两张表,销售额和费用

例如

销售额:

代码语言:javascript
复制
sales_date       Amount
2012-11-01      12000.55
2012-11-03       2650.00
2012-11-03       2650.00
2012-11-03       2650.00
2012-11-07      12900.00
2012-11-07       2900.00

费用:

代码语言:javascript
复制
Expense Date     Amount
2012-11-03         40.00
2012-11-10        100.00
2012-11-10       1000.00
2012-11-11         10.00
2012-11-17        100.00

我需要SQL查询输出为

代码语言:javascript
复制
Date              Sales        Expense
2012-11-01      12000.55
2012-11-03       7950.00          40.00
2012-11-07      15800.00
2012-11-10                      1100.00
2012-11-11                        10.00
2012-11-17                       100.00
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-24 15:03:26

您需要的是一个完整的外部连接:

代码语言:javascript
复制
SELECT COALESCE(E.Date, S.Date) AS Date,
       SUM(S.Amount) AS Sales,
       SUM(E.Amount) AS Expenses
  FROM Expenses AS E
  FULL OUTER JOIN Sales AS S
    ON E.Date = S.Date
 GROUP BY COALESCE(E.Date, S.Date);

这就是标准SQL;我们现在必须确定MySQL是否支持它。不幸的是,正如评论者所指出的那样,MySQL不支持完全的外部连接。

在这种情况下,您必须使用左外连接和右外连接的联合来模拟完整的外连接:

代码语言:javascript
复制
SELECT E.Date AS Date, SUM(S.Amount) AS Sales, SUM(E.Amount) AS Expenses
  FROM Expenses AS E
  LEFT OUTER JOIN Sales AS S
    ON E.Date = S.Date
 GROUP BY E.Date
UNION
SELECT S.Date AS Date, SUM(S.Amount) AS Sales, SUM(E.Amount) AS Expenses
  FROM Expenses AS E
 RIGHT OUTER JOIN Sales AS S
    ON E.Date = S.Date
 GROUP BY S.Date;
票数 0
EN

Stack Overflow用户

发布于 2012-11-24 15:19:59

一个带有UNION ALL的嵌套查询将为您提供所需的内容;首先分别获取所有销售行和所有费用行,然后将它们GROUP到每个日期的公共行中;

代码语言:javascript
复制
SELECT date, FLOOR(SUM(s)) AS sales, FLOOR(SUM(e)) AS expense
FROM
(
  SELECT sales_date  AS date, amount AS s, 0 AS e FROM sales
  UNION ALL     
  SELECT expensedate AS date, 0 AS s, amount AS e FROM expense
) AS individual_rows
GROUP BY date
ORDER BY date;

如果你不想舍入,可以省略FLOOR(你的结果似乎表明你需要舍入)

SQLfiddle demo

票数 1
EN

Stack Overflow用户

发布于 2012-11-24 15:04:48

您需要一个完整的外部联接。如果mysql不支持它,可以在here上查找可能的解决方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13539091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档