2016-08-03 100 views
0

我試圖在現有的線程上搜索幫助,但是我發現自己由於答案而丟失了。MySQL - 連接3個表並將一行作爲列

這裏是我的情況:

我有兩個表:賬戶,NET_PROCEEDS

帳目表有:

  1. ACCOUNT_ID
  2. ACCOUNT_NAME
  3. ACCOUNT_DESCRIPTION

NET_PROCEEDS表有:

  1. Net_Proceeds_ID
  2. ACCOUNT_ID
  3. Fiscal_Year
  4. 金額

現在我的基本的SQL都可以加入兩個表的輸出:

Account_ID | Account_Name | Account_Description | Fiscal_Year |量

但我想拿出這樣的輸出:

ACCOUNT_ID | Account_Name | Account_Description | 2016 | 2017 | 2018 | 2019

fiscal_year將成爲一個值爲金額的列。

有什麼想法?我會感謝你的幫助。 由於保密性,我無法分享代碼。謝謝。

回答

0

這裏有兩種方法來實現它,具體取決於Account_ID在兩個表中是否都是唯一的。 更快的方式(如果ACCOUNT_ID是唯一的每個表):

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' 

的更安全的方式(如果ACCOUNT_ID不是/可能不是唯一的每個表):

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 

如果使用第一個當Account_ID不唯一時,它會爲每個Account_ID的重複實例創建多個行,這將與任何SUM或COUNTs等混在一起。

+0

感謝您的支持,但net_proceeds表中可能有很多account_ID。 – Dhenn

+0

嗨,是的,這就是爲什麼你會使用第二個查詢 – tomb