mysql - 通过子查询同一个表创建 View

标签 mysql view subquery

我有一个包含以下列的表格:

表 1:

YR     Name     Code 
---------------------
2011     A       1a      
2012     A       2a 
2013     A       3a

我想创建一个如下所示的 View :

View 1:

Name     2013Code     2012Code     2011Code
---------------------------------------------------------------
A           1a           2a           3a

我是否使用子查询来填充每一列?

最佳答案

如果您只有这三个(或几个有限年份值),您可以使用 case 语句轻松地透视此表:

CREATE VIEW view1 AS
SELECT 
  name, 
  MAX(CASE WHEN yr = 2013 THEN code END) AS '2013Code',
  MAX(CASE WHEN yr = 2012 THEN code END) AS '2012Code',
  MAX(CASE WHEN yr = 2011 THEN code END) AS '2011Code'
FROM myTable
GROUP BY name;

但是,如果您需要一些动态的东西,我会引用 this article有关动态数据透视表的信息。查询看起来像这样:

SET @query = NULL;
SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(CASE WHEN yr = ''', yr, ''' THEN code END) AS ', yr, 'code')) INTO @query FROM myTable;
SET @query = CONCAT('SELECT name, ', @query, ' FROM myTable GROUP BY name');

第一部分将设置用于选择年份值作为列名称的模板,而第二部分将从表中选择这些值并按名称分组。剩下要做的唯一一件事就是执行这个准备好的语句:

PREPARE stmt FROM @query;
EXECUTE stmt;

这是一个 SQL Fiddle ,包括硬编码版本和动态版本,因此您可以看到它们产生相同的结果。

关于mysql - 通过子查询同一个表创建 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32950555/

相关文章:

mysql - 数据库对话获取已发送消息的列表

MySQL创建 View 时如何动态选择从哪个表获取数据

mysql - 优化多个IN的mysql子查询

mysql - 按一年中的周查找 ActiveRecord 对象

javascript - 如何将我的模型连接/关联到我的 View ?

view - EmberJS : How to handle actions from the View not the Route/Controller

mysql - 无法从查询中获取适当的值?

mysql - mysql 查询出错。需要获取城市名称和在该城市进行的最大比赛数

mysql - 显示重复值子查询mysql

mysql - SQL选择中的映射值?