每个月的报告来自不同的表格

时间:2014-01-28 06:57:42

标签: mysql join

我有四张桌子,分别有四个日期颜色。

Table 1  ---------- Date 1
Table 2  ---------- Date 2
Table 3  ---------- Date 3
Table 4  ---------- Date 4

现在我想在一个月内为所有四个表获得一天的报告。如果特定日期的任何特定表中没有数据,它应该显示为NULL。我能如何实现它?

结构: -

表1: -

ID   Amount1    Date1 
1    340       24/04/2013
2    200       04/04/2013
3    1000      15/04/2013

表2: -

ID   Amount2    Date2
1    2000       22/04/2013
2    200        04/04/2013
3    1500       15/04/2013

表-3: -

ID   Amount3    Date3 
1    3400       24/04/2013
2    200        19/04/2013
3    1800       15/04/2013

表-4: -

ID   Amount4    Date4 
1    3200       24/04/2013
2    2200       04/04/2013
3    1000       18/04/2013

现在我的结果应该是

Date            Amount1           Amount2          Amount3          Amount4

01/04/2013      Null                Null              Null            Null 
|
|
|
04/04/2013      200               200               null             2200
|
|
|
|
15/0402013     1000                1500             1800             null
|
|
|
|
|24/0402013     340                null              3400             3200
|
|
|
|
31/04/2013   

2 个答案:

答案 0 :(得分:1)

使用子查询获取一系列日期(我假设您希望在2013年4月每天都有这样的日期),然后将其加入到数据表中。

SELECT, dates.aDate, Table-1.Amount1, Table-2.Amount2, Table-3.Amount3, Table-4.Amount4
FROM
(
    SELECT DATE_ADD('2013-04-01', INTERVAL (Units.i + Tens.i * 10) DAY) AS aDate
    FROM
    (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Units,
    (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) Tens
    HAVING aDate <= '2013-04-30'
) dates
LEFT OUTER JOIN Table-1 ON Table-1.Date1 = dates.aDate
LEFT OUTER JOIN Table-2 ON Table-2.Date2 = dates.aDate
LEFT OUTER JOIN Table-3 ON Table-3.Date3 = dates.aDate
LEFT OUTER JOIN Table-4 ON Table-4.Date4 = dates.aDate

这假设任何特定表格中没有重复日期。

答案 1 :(得分:0)

您可以尝试以下查询

with dates as (
        (select date from date1)union(select date from date2)union
        (select date from date3)union (select date from date4) order by date asc)
select date, 
  (select amount from date1 where date=dt.date limit 1),
  (select amount from date2 where date=dt.date limit 1),
  (select amount from date3 where date=dt.date limit 1),
   (select amount from date4 where date=dt.date limit 1)
  from dates as dt;

您可以在日期添加日期限制。

P.S。:在PgSQL上测试