我的最终目标是在MySQL中创建一个基于另一个表内容的动态列的数据透视表视图。目前我正试图继续artfulsoftware离开的地方;现在我可以查询给我所需列名的结果。不幸的是,我迷失了如何在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;
我该怎么做?
答案 0 :(得分:3)
您可以使用MySQL Server prepared statements从字符串变量构建动态查询。
示例:
SELECT domain INTO @colname FROM myTable LIMIT 1;
SET @s = CONCAT('SELECT `',@colname,'` FROM myTable');
PREPARE stmt FROM @s;
EXECUTE stmt;
注意:如果列名称包含空格,则需要反引号。
答案 1 :(得分:3)
在SQL中,必须在查询准备时修复列名 - 没有例外。当您不知道列时设计动态数据透视查询需要您以任何方式编写应用程序代码。您可以选择使用预处理方法还是后处理方法:
预处理:编写查询以获取不同值的列表。然后将它们用作列名,并生成新的动态SQL查询。
后处理:编写查询以将数据作为非旋转结果获取,然后获取所有数据并转换为其他格式。