1

mySQL を使用してテーブルを変更 (ピボット) しようとしています:

WMU     YEAR     CPUE
 a       1987       22
 a       1988       32
 a       1989       2
 a       1990       34   
 b       1988       5
 b       1990       4 

する必要があります:

WMU     CPUE_1987     CPUE_1988    CPUE_1999    CPUE_1990
 a           22           32         2             34
 b           5            null       null           4

SELECT ステートメントと JOIN ステートメントを使用してみました。

select t.wmu, 
tb2.CPUE as CPUE_1987, 
tb3.CPUE as CPUE_1988, 
tb4.CPUE as CPUE_1989, 
tb5.CPUE as CPUE_1990,
from muledeerharvest2011 as t 
JOIN muledeerharvest2011 as tb2 
JOIN muledeerharvest2011 as tb3 
JOIN muledeerharvest2011 as tb4 
JOIN muledeerharvest2011 as tb5
WHERE tb2.year = 1987 and t.WMU = tb2.WMU
and tb3.year = 1988 and t.WMU = tb3.WMU
and tb4.year = 1989 and t.WMU = tb4.WMU
and tb5.year = 1990 and t.WMU = tb5.WMU:

これは、すべての「YEAR」値を持つ「WMU」エントリに対してのみ機能します。例の b などの行はまったく選択されません。

空白の年の値が出力で null として表示されるように、このステートメントを変更する方法はありますか?

前もって感謝します!

4

2 に答える 2

0

質問が正しければ、次のクエリで解決策が得られます。

あなたは であるため、 と の値を取得していませんINNER JOIN (JOIN)トリックLEFT JOIN を行います

select distinct
t.wmu, 
tb2.CPUE as CPUE_1987, 
tb3.CPUE as CPUE_1988, 
tb4.CPUE as CPUE_1989, 
tb5.CPUE as CPUE_1990
from muledeerharvest2011 as t 
LEFT JOIN muledeerharvest2011 tb2 
   on tb2.Year = 1987 and t.WMU = tb2.WMU
LEFT JOIN muledeerharvest2011 tb3 
   on tb3.Year = 1988 and t.WMU = tb3.WMU
LEFT JOIN muledeerharvest2011 tb4 
   on tb4.Year = 1989 and t.WMU = tb4.WMU
LEFT JOIN muledeerharvest2011 tb5 
   on tb5.Year = 1990 and t.WMU = tb5.WMU

これがSQLフィドルです

于 2013-05-01T15:15:21.537 に答える