MySQL中的查询,从两个表中获取值并按特定顺序排列

MySQL中的查询,从两个表中获取值并按特定顺序排列,mysql,sql,join,Mysql,Sql,Join,我想从这两个表中获取值,并以特定的方式将它们放在GridView中。 第一个表是估计收入,第二个表是实际收入。 这是估计收入表: 这是实际收入: 我想从两个表中获取值,并将其显示在GridView中,使其看起来像此表: 我坚持的代码是: 假设bacci.estimated_income_表保证包含我们想要返回的所有12个月的行,并且假设estimated_month列是整数值1到12,我会这样做: 编辑 看起来,估计月实际上是月份名称一月,二月。。。因此,我们从中得出月份1到12 SELEC

我想从这两个表中获取值,并以特定的方式将它们放在GridView中。 第一个表是估计收入,第二个表是实际收入。 这是估计收入表: 这是实际收入: 我想从两个表中获取值,并将其显示在GridView中,使其看起来像此表:

我坚持的代码是:

假设bacci.estimated_income_表保证包含我们想要返回的所有12个月的行,并且假设estimated_month列是整数值1到12,我会这样做:

编辑

看起来,估计月实际上是月份名称一月,二月。。。因此,我们从中得出月份1到12

SELECT d.y_                                  AS `year`
     , d.mn_                                 AS `month`
     , IFNULL(SUM(d.actual),0)               AS `actual`
     , IFNULL(SUM(d.estimated),0)            AS `estimated`
  FROM (
         SELECT YEAR(it.date_income_table)                      AS `y_`
              , MONTH(it.date_income_table)                     AS `m_`
              , MONTHNAME(it.date_income_table)                 AS `mn_`
              , SUM(it.amount_income_table)                     AS `actual`
              , NULL                                            AS `estimated`
           FROM bacci.income_table it
          WHERE it.date_income_table >= '2017-01-01'
            AND it.date_income_table  < '2017-01-01' + INTERVAL 1 YEAR
          GROUP
             BY YEAR(it.date_income_table)
              , MONTH(it.date_income_table)
              , MONTHNAME(it.date_income_table)

          UNION ALL

         SELECT ei.estimated_year                               AS `y_`
              , MONTH(STR_TO_DATE(ei.estimated_month,'%M'))     AS `m_`
              , ei.estimated_month                              AS `mn_`
              , NULL                                            AS `actual`
              , SUM(ei.estimated_amount)                        AS `estimated`
           FROM bacci.estimated_income_table ei
          WHERE ei.estimated_year = '2017'
          GROUP
             BY ei.estimated_year
              , MONTH(STR_TO_DATE(ei.estimated_month,'%M'))
              , ei.estimated_month
       ) d
 GROUP
    BY d.y_
     , d.m_
     , d.mn_
 ORDER
    BY d.y_
     , d.m_

你好桌子没有秩序。结果集[sic]具有顺序。您必须按顺序使用。PS请阅读并采取行动。为什么您要尝试合并具有不同列数的表?每个月我都会输入月份的值,以便该表仅显示具有值的月份。我不知道您在说什么。如果是关于联合的,那么无论您为什么尝试联合具有不同列数的表,您都不能。请使用文本作为文本。PS您希望我们如何查看您当前的代码或检查修改后的代码?我们无法运行您的查询,没有用于DDL或输入的文本。再次:。PS您正在订购整张桌子。但是按月名,但你不想按月名订购,为什么?你要的是月号。总行必须有一个适当的月份订购号。将您的问题分解为几个部分,并在合并/extend.hi@spencer7593之前更正每个部分。当我尝试此查询时,它会给我以下错误:错误代码:1054。“字段列表”中的未知列“金额\收入\表”,在外部查询中应为d.实际值和d.估计值。我已经更正了。仍然收到一个错误:错误代码:1054。“字段列表”中的未知列“d.estimated”我是使用Querymy bad的新手,这需要是一个单独的列。DOH!我以为我们是在做一个联合,却忘了我们是在做一个联合。我开始为1到12添加一个行源,然后进行左外连接。。。但我没有这样做。内联视图d被更正为返回实际列和估计列。
SELECT d.y_                                  AS `year`
     , d.mn_                                 AS `month`
     , IFNULL(SUM(d.actual),0)               AS `actual`
     , IFNULL(SUM(d.estimated),0)            AS `estimated`
  FROM (
         SELECT YEAR(it.date_income_table)                      AS `y_`
              , MONTH(it.date_income_table)                     AS `m_`
              , MONTHNAME(it.date_income_table)                 AS `mn_`
              , SUM(it.amount_income_table)                     AS `actual`
              , NULL                                            AS `estimated`
           FROM bacci.income_table it
          WHERE it.date_income_table >= '2017-01-01'
            AND it.date_income_table  < '2017-01-01' + INTERVAL 1 YEAR
          GROUP
             BY YEAR(it.date_income_table)
              , MONTH(it.date_income_table)
              , MONTHNAME(it.date_income_table)

          UNION ALL

         SELECT ei.estimated_year                               AS `y_`
              , MONTH(STR_TO_DATE(ei.estimated_month,'%M'))     AS `m_`
              , ei.estimated_month                              AS `mn_`
              , NULL                                            AS `actual`
              , SUM(ei.estimated_amount)                        AS `estimated`
           FROM bacci.estimated_income_table ei
          WHERE ei.estimated_year = '2017'
          GROUP
             BY ei.estimated_year
              , MONTH(STR_TO_DATE(ei.estimated_month,'%M'))
              , ei.estimated_month
       ) d
 GROUP
    BY d.y_
     , d.m_
     , d.mn_
 ORDER
    BY d.y_
     , d.m_