繁体   English   中英

如何在SELECT语句中将查询结果用作列名

[英]How to use a query's results as column names in a SELECT statement

我的最终目标是在MySQL中创建一个基于另一个表内容的动态列的数据透视表视图。 目前我正试图继续从巧妙的软件出发的地方继续; 现在我可以查询给我所需列名的结果。 不幸的是,我迷失了如何在SELECT语句中将结果实际用作列名。 我怀疑MySQL变量会有所帮助,但我无法弄清楚。

为了澄清这个问题,我说有一张表:

+---------------------------------------------------+
| countpivotarg                                     |
+---------------------------------------------------+
| ,SUM(IF(domain = "test.com",1,0)) AS `test.com`   |
| ,SUM(IF(domain = "test2.com",1,0)) AS `test2.com` |
+---------------------------------------------------+

我想创建一个如下所示的select语句:

SELECT id,
       meta_id,
       SUM(IF(domain = "test.com",1,0)) AS `test.com`,
       SUM(IF(domain = "test2.com",1,0)) AS `test2.com`
FROM   myTable;

我该怎么做呢?

您可以使用MySQL Server预处理语句从字符串变量构建动态查询。

例:

SELECT domain INTO @colname FROM myTable LIMIT 1;
SET @s = CONCAT('SELECT `',@colname,'` FROM myTable');
PREPARE stmt FROM @s;
EXECUTE stmt;

注意:如果列名称包含空格,则需要反引号。

在SQL中,必须在查询准备时修复列名 - 没有例外。 当您不知道列时设计动态数据透视查询需要您以任何方式编写应用程序代码。 您可以选择使用预处理方法还是后处理方法:

  • 预处理:编写查询以获取不同值的列表。 然后将它们用作列名,并生成新的动态SQL查询。

  • 后处理:编写查询以将数据作为非旋转结果获取,然后获取所有数据并转换为另一种格式。

暂无
暂无

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

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