2017-09-24 71 views
1

我有5个相同的MySQL表格,每个表格都有不同的数据但结构相同。UNION来自不同表格的所有更多表格和其他数据

我需要总结自己的价值观和我做这种方式:

SELECT 
SUM(alltables.Quantity) AS total_qty, 
format(SUM(alltables.eur), 2) as total_eur, 
format(SUM(alltables.eur_80), 2) as total_eur_80, 
format(SUM(alltables.eur)*.12, 2) as detrazioni, 
format(SUM(alltables.eur_80)-(SUM(alltables.eur)*.12), 2) as ricevere 
FROM (
    SELECT Quantity, eur, eur_80 FROM table_one WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' UNION ALL 
    SELECT Quantity, eur, eur_80 FROM table_two WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' UNION ALL 
    SELECT Quantity, eur, eur_80 FROM table_three WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' UNION ALL 
    SELECT Quantity, eur, eur_80 FROM table_four WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' UNION ALL 
    SELECT Quantity, eur, eur_80 FROM table_five WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' 
) alltables 

此计算客户已经拿到的声明,其结果是恰到好处:

enter image description here

我比做一个adjustment表具有相同的结构,在出现一些计算错误的情况下,我可以添加一些额外的行来调整/修复他们的收入。

所以,我的卡住点:我必须从上面做出一个新的总和APART并且自己计算eur_80字段与相同的WHERE CLAUSE规范,我必须总结它到ricevere(在SELECT中计算的字段声明)。

事情是这样的:

enter image description here

我已经试过了JOIN,但没有运气。

+3

*“我有5个相同的MySQL表,” *第一件事想到的是'为什么'? – GolezTrol

+2

Hahahah - 因为它是自定义导入的Apple,Amazon和其他卖家数据,以不同来源以不同方式进入,并且每个数据都有不同的“处理”(即:不同的百分比) –

+0

@ Mr.Web,但无法定义联合表格的观点?这应该让你的生活更轻松。 – ulferts

回答

2

您可以将其添加到子选择中。因为你想要的不同分别显示在总用,我搬到了另外的列和格式到一个更高的水平:

SELECT 
    format(andadjust.total_eur, 2) as total_eur, 
    format(andadjust.total_eur_80, 2) as total_eur_80, 
    format(andadjust.detrazioni, 2) as detrazioni, 
    format(andadjust.ricevere, 2) as ricevere, 
    format(andadjust.difference, 2) as difference, 
    format(andadjust.ricevere + andadjust.difference, 2) as adjustment 
FROM (
    SELECT 
    SUM(alltables.Quantity) AS total_qty, 
    SUM(alltables.eur) as total_eur, 
    SUM(alltables.eur_80) as total_eur_80, 
    SUM(alltables.eur)*.12 as detrazioni, 
    SUM(alltables.eur_80)-(SUM(alltables.eur)*.12) as ricevere, 
    (SELECT sum(eur_80) FROM table_adjustment WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017') as difference 
    FROM (
     SELECT Quantity, eur, eur_80 FROM table_one WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' UNION ALL 
     SELECT Quantity, eur, eur_80 FROM table_two WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' UNION ALL 
     SELECT Quantity, eur, eur_80 FROM table_three WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' UNION ALL 
     SELECT Quantity, eur, eur_80 FROM table_four WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' UNION ALL 
     SELECT Quantity, eur, eur_80 FROM table_five WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' 
) alltables 
) andadjust 
2

我相信使用连接是正确的方法。在这种情况下,它将是一个CROSS JOIN(笛卡尔产品),所以我们不需要任何条件。由于连接应用于两个子查询,每个子查询只有一行总和,它仍然只产生一个结果行。

SELECT 
    total_qty, 
    total_eur, 
    total_eur_80, 
    detrazioni, 
    recevere, 
    difference, 
    (recevere + difference) AS adjustment 
FROM (
    SELECT 
    SUM(alltables.Quantity) AS total_qty, 
    format(SUM(alltables.eur), 2) as total_eur, 
    format(SUM(alltables.eur_80), 2) as total_eur_80, 
    format(SUM(alltables.eur)*.12, 2) as detrazioni, 
    format(SUM(alltables.eur_80)-(SUM(alltables.eur)*.12), 2) as ricevere 
    FROM (
    SELECT Quantity, eur, eur_80 FROM table_one WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' UNION ALL 
    SELECT Quantity, eur, eur_80 FROM table_two WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' UNION ALL 
    SELECT Quantity, eur, eur_80 FROM table_three WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' UNION ALL 
    SELECT Quantity, eur, eur_80 FROM table_four WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' UNION ALL 
    SELECT Quantity, eur, eur_80 FROM table_five WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' 
) alltables 
) sums_table 
CROSS JOIN (
    SELECT 
    SUM(eur_80) AS difference 
    FROM adjustment 
    WHERE user_id = 849 AND Trimestre_month = '6' AND Trimestre_year = '2017' 
) adjustment_table 

只是让我听起来父亲每天一次和的原因完全不了解具有结构相同的多个表,我建议到表合并成一个单一的一个具有枚举列区分条目。这样做会大大简化上述查询。

相关问题