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