4

MySQL に次のフィールドを持つテーブルがあります。

id, company_name, year, state

同じ顧客と年に対して複数の行があります。データの例を次に示します。

    id | company_name  | year | state
----------------------------------------
    1  | companyA      | 2008 | 1
    2  | companyB      | 2009 | 2
    3  | companyC      | 2010 | 3
    4  | companyB      | 2009 | 1
    5  | companyC      | NULL | 3

このテーブルからビューを作成して、行ごとに 1 つの会社 (つまりGROUP BY、pubco_name) を表示しようとしています。ここでは、州が特定の年で最も高い場所です。

作成しようとしているビューの例を次に示します。

    id | cuompany_name | NULL | 2008 | 2009 | 2010
--------------------------------------------------
    1  | companyA      | NULL | 1    | NULL | NULL
    2  | companyB      | NULL | 2    | NULL | NULL
    3  | companyC      | 3    | NULL | NULL | 3

これよりも多くのデータがありますが、私が達成しようとしていることを見ることができます。

各年の最大州を選択し、pubco_name でグループ化する方法がわかりません。CASEここに私がこれまでに持っているSQLがあります( and/or hereを使用する必要があると思いsub-selectsます):

SELECT
id,
company_name,
SUM(CASE WHEN year = 2008 THEN max(state) ELSE 0 END) AS 2008,
SUM(CASE WHEN year = 2009 THEN max(state) ELSE 0 END) AS 2009,
SUM(CASE WHEN year = 2010 THEN max(state) ELSE 0 END) AS 2010,
SUM(CASE WHEN year = 2011 THEN max(state) ELSE 0 END) AS 2011,
SUM(CASE WHEN year = 2012 THEN max(state) ELSE 0 END) AS 2012,
SUM(CASE WHEN year = 2013 THEN max(state) ELSE 0 END) AS 2013
FROM tbl
GROUP BY company_name
ORDER BY id DESC

ご協力に感謝し、事前に感謝します。

4

2 に答える 2