2016-08-03 5 views
0

既存のスレッドのヘルプを検索しようとしましたが、回答のため失われました。MySQL - 3つのテーブルを結合し、1つの行を列として作成する

ここに私のシナリオです:

私は2つのテーブルがあります:アカウントを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は、この出力を持つ2つのテーブルを結合することができます

    Account_ID |アカウント名| Account_Description | Fiscal_Year |金額

    しかし、私は、この出力で出てくるしようとしています:

    ACCOUNT_ID |アカウント名| Account_Description | 2016年| 2017年| 2018年| 2019

    fiscal_yearはamountの値を持つ列になります。

    どのような考えですか?私はあなたの助けに感謝します。 P.S機密性のためにコードを共有することはできません。ありがとう。

答えて

0

Account_IDが両方のテーブルで一意であるかどうかによって、2つの方法があります。 (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やCOUNTなどが混乱します。

+0

ありがとうございますが、net_proceedsテーブルにaccount_IDが多数ある可能性があります。 – Dhenn

+0

こんにちは、うん、それで、なぜあなたは2番目のクエリ – tomb

関連する問題