2017-09-24 65 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 

只是讓我聽起來父親每天一次和的原因完全不瞭解具有結構相同的多個表,我建議到表合併成一個單一的一個具有枚舉列區分條目。這樣做會大大簡化上述查詢。

相關問題