2016-04-08 9 views
1

Ich wünschte, ich das Schema ändern könnte, aber ich bin daran gebunden, nehme ich die folgenden TabellenPivot MySQL Data

JanDataTable 
FebDataTable 
MarDataTable 
ProductsTable 

Wo die ersten drei Tabellen Spalten ID und Betrag verkauft haben. Die Produkttabelle hat eine ID und einen Produktnamen.

Ich brauche irgendwie diese Tabellen verknüpfen der folgenden Ausgabe ID

ID | Product Name | Amount Sold | Month 
01 | TV 1   | 23   | 1  <- JanDataTable 
02 | TV 2   | 43   | 2  <- FebDataTable 
03 | Toaster 1 | 72   | 3  <- MarDataTable 

Wo ID ist das Produkt zu erhalten.

Ist nur eine Abfrage möglich?

+0

Dieser Entwurf ist nicht nachhaltig. Gehe für deine eigene Gesundheit in eine Position, in der du das reparieren oder dieses Projekt aufgeben kannst. – Strawberry

Antwort

0
select p.product_part,s.* 
from 
(
select d.*, 1 as Month from jandatatable d 
union 
select d.*, 2 as Month from febdatatable d 
union 
select d.*, 3 as Month from mardatatable d 
) s 
join product p on s.Product_id = p.product_id 
order by s.month, p.product_id; 
+0

Danke, ich endete mit etwas ähnliches zu diesem Thema – user316114

0

Wie wäre es damit?

Verwenden Sie LEFT JOIN, um es zu tun.

select 
    p.id as ID, p.`Product Name`, 
    coalesce(jan.`Amount Sold`,0) + coalesce(feb.`Amount Sold`,0) + coalesce(mar.`Amount Sold`,0) as `Amount Sold`, 
    case when p.id = '01' then 1 
     when p.id = '02' then 2 
     when p.id = '03' thwn 3 
    end as Month 
from ProductsTable as p 
    LEFT JOIN JanDataTable as jan ON p.id = jan.id 
    LEFT JOIN FebDataTable as feb ON p.id = feb.id 
    LEFT JOIN MarDataTable as mar ON p.id = mar.id 
+0

Nun, wenn Sie entschlossen sind, eine Lösung zu bieten, hier ist ein Hinweis: UNION – Strawberry