我在 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
我正在尝试从此表中创建一个视图,以显示每行一家公司(即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 分组。这是我到目前为止的 SQL(我认为我们需要在这里使用CASE
和/或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
提前感谢您的帮助和感谢。