2016-05-13 10 views
0

2つのテーブルから2つのテーブルからレコードをフェッチするクエリが必要ですが、カラム名は2番目のテーブルのレコードに基づいている必要があります。 詳細は、私が参加し、左使用して、これを達成することができる午前出力のような、2つのテーブルからレコードをフェッチする方法2番目のテーブル行レコードに基づいてカラム名を指定する

emp_id emp_name  jan feb 
    1   Abc  4000 3000 
    2   XYZ  5000 4500 

が必要

私の最初のテーブル

Emp Table 
emp_id  emp_name 
    1   Abc 
    2   XYZ 
    3   PQR 

私の第二のテーブル

Salary Table 
id emp_id month salary 
1  1  1  4000 
2  1  2  3000 
3  2  1  5000 
4  2  2  4500 

下回っていますしかし毎月私は

01のようなクエリでそれを追加する必要があります
select e.emp_id,e.emp_name,j.month as Jan,f.month as Feb from emp e 
Left Join salary j on e.emp_id=j.emp_id and j.month=1  
Left Join salary f on e.emp_id=f.emp_id and f.month=2 

私の場合は上記の作業が可能ですが、これは実現不可能です。私は月のマスターテーブルも持っています。

Month Table 
id  Name 
1  Jan 
2  Feb 
3  March 
5  April 

私は(月& 2月)のために、現在、特定の月のためのレコードをフェッチします。

私はこのより速い方法を実現してください。条件付きの集約使用

+0

あなたは月のマスターテーブルを投稿してくださいことはできますか? –

答えて

1

SELECT 
    e.emp_id, 
    e.emp_name, 
    [Jan] = MAX(CASE WHEN s.[month] = 1 THEN s.salary END), 
    [Feb] = MAX(CASE WHEN s.[month] = 2 THEN s.salary END), 
    [Mar] = MAX(CASE WHEN s.[month] = 3 THEN s.salary END), 
    [Apr] = MAX(CASE WHEN s.[month] = 4 THEN s.salary END), 
    [May] = MAX(CASE WHEN s.[month] = 5 THEN s.salary END), 
    [Jun] = MAX(CASE WHEN s.[month] = 6 THEN s.salary END), 
    [Jul] = MAX(CASE WHEN s.[month] = 7 THEN s.salary END), 
    [Aug] = MAX(CASE WHEN s.[month] = 8 THEN s.salary END), 
    [Sep] = MAX(CASE WHEN s.[month] = 9 THEN s.salary END), 
    [Oct] = MAX(CASE WHEN s.[month] = 10 THEN s.salary END), 
    [Nov] = MAX(CASE WHEN s.[month] = 11 THEN s.salary END), 
    [Dec] = MAX(CASE WHEN s.[month] = 12 THEN s.salary END) 
FROM Emp e 
LEFT JOIN Salary s 
    ON s.emp_id = e.emp_id 
GROUP BY 
    e.emp_id, e.emp_name 

ONLINE DEMO

+0

こんにちはフェリックス、すぐにお返事ありがとうございます。 私は1つの質問があります:給与が(4000ドル)のような文字列であれば、集計関数を使用しますか?私がMaxを削除した場合、エラーになります。 –

+0

「MAX」を使用しても問題ありません。 –

+0

Nullを空白に置き換えたいのですが? –

関連する問題