繁体   English   中英

通过子查询同一张表创建视图

[英]Create views by subquerying same table

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

表1

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

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

查看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;

但是,如果您需要动态的东西,我将参考本文以获取有关动态数据透视表的信息。 查询如下所示:

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 ,具有硬编码和动态版本,因此您可以看到它们产生相同的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM