2016-08-03 13 views
0

Ich habe versucht, auf vorhandenen Threads nach Hilfe suchen, aber ich fand mich aufgrund der Antworten verloren.MySQL - Joining 3 Tabellen und machen eine Zeile als Spalte

Hier ist mein Szenario:

Ich habe zwei Tabellen: Konten, NET_PROCEEDS

ABSCHLUSS Tabelle hat:

  1. ACCOUNT_ID
  2. Account_Name
  3. Account_Description

NET_PROCEEDS Tabelle hat:

  1. Net_Proceeds_ID
  2. ACCOUNT_ID
  3. FISCAL_YEAR
  4. Betrag

Jetzt ist meine grundlegende SQL zwei Tabellen mit diesem Ausgang verbinden kann:

Konto_ID | Kontoname | Konto_Beschreibung | Fiscal_Year | Menge

Aber ich versuche, mit diesem Ausgang zu kommen:

Account_ID | Kontoname | Konto_Beschreibung | 2016 | 2017 | 2018 | 2019

Das fiscal_year wird eine Spalte mit einem Betragswert.

Irgendwelche Gedanken? Ich werde deine Hilfe zu schätzen wissen. P.S Ich kann den Code aufgrund der Vertraulichkeit nicht teilen. Vielen Dank.

Antwort

0

Hier sind zwei Möglichkeiten, je nachdem, ob Account_ID in beiden Tabellen eindeutig ist oder nicht. Der schnellere Weg (wenn Account_ID zu jeder Tabelle eindeutig ist):

SELECT A.*, N16.Amount as Amount_2016 
, N17.Amount as Amount_2017 
, N18.Amount as Amount_2018 
, N19.Amount as Amount_2019 
FROM ACCOUNTS A 
LEFT JOIN NET_PROCEEDS N16 ON N16.Account_ID = A.Account_ID AND N16.Fiscal_Year = '2016' 
LEFT JOIN NET_PROCEEDS N17 ON N17.Account_ID = A.Account_ID AND N17.Fiscal_Year = '2017' 
LEFT JOIN NET_PROCEEDS N18 ON N18.Account_ID = A.Account_ID AND N18.Fiscal_Year = '2018' 
LEFT JOIN NET_PROCEEDS N19 ON N19.Account_ID = A.Account_ID AND N19.Fiscal_Year = '2019' 

Der sicherere Weg (wenn Account_ID nicht/ist zu jeder Tabelle kann nicht eindeutig sein):

SELECT A.*, (SELECT SUM(N16.Amount) FROM NET_PROCEEDS N16 ON N16.Account_ID = A.Account_ID AND N16.Fiscal_Year = '2016') as Amount_2016 
, (SELECT SUM(N17.Amount) FROM NET_PROCEEDS N17 ON N17.Account_ID = A.Account_ID AND N17.Fiscal_Year = '2017') as Amount_2017 
, (SELECT SUM(N18.Amount) FROM NET_PROCEEDS N18 ON N18.Account_ID = A.Account_ID AND N18.Fiscal_Year = '2018') as Amount_2018 
, (SELECT SUM(N19.Amount) FROM NET_PROCEEDS N19 ON N19.Account_ID = A.Account_ID AND N19.Fiscal_Year = '2019') as Amount_2019 
FROM ACCOUNTS A 

Wenn Sie die Der erste, wenn Account_ID nicht eindeutig ist, wird es mehrere Zeilen für jede doppelte Instanz von Account_ID erstellen, die mit SUMs oder COUNT etc. stören wird.

+0

Danke dafür, aber es könnte viele account_ID in net_proceeds Tabelle geben. – Dhenn

+0

Hallo, ja, deshalb würden Sie die zweite Abfrage verwenden – tomb