MySQL是否可以将列转换为行,从而动态添加行所需的列数。我认为我的问题可能与数据透视表有关,但是我不确定,除了给出以下示例之外,我不知道如何构造此问题。
给定两个表A和B,它们看起来像
表A
+--+-----+----+
|id|order|data|
+--+-----+----+
|1 |1 |P |
+--+-----+----+
|2 |2 |Q |
+--+-----+----+
|2 |1 |R |
+--+-----+----+
|1 |2 |S |
+--+-----+----+
我想编写一个如下查询:
结果表
+--+-----+-----+
|id|data1|data2|
+--+-----+-----+
|1 |P |S |
+--+-----+-----+
|2 |R |Q |
+--+-----+-----+
基本上,我想将表B中的每一行变成结果表中的一列。如果有一个新条目被添加到表B中,id = 1,那么我希望结果表自动扩展一列以容纳这个额外的数据点。
您可以使用GROUP BY
和MAX
模拟枢轴。MySQL还支持IF
语句。
SELECT ID,
MAX(IF(`order` = 1, data, NULL)) data1,
MAX(IF(`order` = 2, data, NULL)) data2
FROM TableA
GROUP BY ID
如果您有多个值order
,则动态SQL可能更合适,这样您就不必修改查询:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(`order` = ', `order`, ',data,NULL)) AS data', `order`)
) INTO @sql
FROM TableName;
SET @sql = CONCAT('SELECT ID, ', @sql, '
FROM TableName
GROUP BY ID');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
两个查询的输出:
╔════╦═══════╦═══════╗
║ ID ║ DATA1 ║ DATA2 ║
╠════╬═══════╬═══════╣
║ 1 ║ P ║ S ║
║ 2 ║ R ║ Q ║
╚════╩═══════╩═══════╝
问题内容: 我正在处理数据透视表查询。架构如下 Sno,名称,地区 同一名称可能在许多地区出现,例如以样本数据为例 如您所见,我有一组4个不同的地区(CA,JB,MN,LP)。现在,我想通过将名称映射到区域来获取为其生成的数据透视表 我为此写了以下查询 但是,地区可能会增加,在这种情况下,我将不得不再次手动编辑查询并向其中添加新的地区。 我想知道是否存在一个查询,该查询可以动态获取不同地区的名称并
问题内容: 我在这里跟随一个问题,使用Mysql查询将行动态转换为列。这工作正常,但我需要根据两列进行转换, 上面链接中提到的查询适用于单列“数据”,但我想适用于“数据”和“价格”两列。 我在这里加了一个例子, 给定一个表A,看起来像 我想编写一个如下查询: 我试图创建两个不同的查询,然后创建一个联接来实现此目的,但这可能不是一个好的解决方案。谁能建议像上面链接中提到的解决方案。 谢谢 问题答案:
问题内容: 关于我之前的问题ElasticSearchQuery,其中给出了映射和doc示例,我想将此MySql查询转换为Elasticsearch。这是mysql查询 期待您的帮助 问题答案: 以下查询将为您提供帮助。请注意,在映射中,您已经提到了上述查询。 尽管如此,我还是利用了它,使其与映射保持一致。 我使用过术语查询,术语查询和多匹配查询的变体。 请注意,我已经在字段上使用了Term Qu
问题内容: 我正在使用mysql功能XOR(^)和BIT_COUNT()的Ruby应用程序上工作。但是,我现在需要在运行PyGreSQL的Heroku上运行该应用程序。 我找不到任何可以帮助我的PyGreSQL文档。 那么任何人都可以翻译此mysql查询,以便在pygresql数据库上执行时可以正常工作吗? pygresql给我错误 谢谢。 问题答案:
问题内容: 我需要将此查询从MySQL格式转换为SQLite。我正在尝试自己,但发现了一些困难。 在SQLite中,curdate()和interval函数不存在。 问题答案: 这是基本语法: 我忽略了该子句,因为这些日期是过去1000多个日期,因此他们无论如何都不会选择任何内容。
我使用了cakephp Mysql到mongodb查询组件,即将Mysql查询转换到mongodb中,但是当查询有多个括号时代码停止工作,我还尝试将http://www.querymongo.com/site上的查询转换为相同的问题,