我想知道如何逆转置Table_1
成Expected_Result_Table
:
Table1
-----------------------------------------
Id abc brt ccc ddq eee fff gga hxx
-----------------------------------------
12345 0 1 0 5 0 2 0 0
21321 0 0 0 0 0 0 0 0
33333 2 0 0 0 0 0 0 0
41414 0 0 0 0 5 0 0 1
55001 0 0 0 0 0 0 0 2
60000 0 0 0 0 0 0 0 0
77777 9 0 3 0 0 0 0 0
Expected_Result_Table
---------------------
Id Word Qty>0
---------------------
12345 brt 1
12345 ddq 5
12345 fff 2
33333 abc 2
41414 eee 5
41414 hxx 1
55001 hxx 2
77777 abc 9
77777 ccc 3
那么,如何只考虑值> 0 来转置Table_1
结果in中的列Expected_Result_Table
?
MySQL没有UNPIVOT函数,但是您可以使用将列转换为行UNION ALL
。
基本语法为:
select id, word, qty
from
(
select id, 'abc' word, abc qty
from yt
where abc > 0
union all
select id, 'brt', brt
from yt
where brt > 0
) d
order by id;
对于您的情况,您声明需要动态列的解决方案。如果真是这样,那么您将需要使用准备好的语句来生成动态SQL:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'select id, ''',
c.column_name,
''' as word, ',
c.column_name,
' as qty
from yt
where ',
c.column_name,
' > 0'
) SEPARATOR ' UNION ALL '
) INTO @sql
FROM information_schema.columns c
where c.table_name = 'yt'
and c.column_name not in ('id')
order by c.ordinal_position;
SET @sql
= CONCAT('select id, word, qty
from
(', @sql, ') x order by id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
参见带有演示的SQL Fiddle
问题内容: MySQL是否可以将列转换为行,从而动态添加行所需的列数。我认为我的问题可能与数据透视表有关,但是我不确定,除了给出以下示例之外,我不知道如何构造此问题。 给定两个表A和B,它们看起来像 表A 我想编写一个如下查询: 结果表 基本上,我想将表B中的每一行变成结果表中的一列。如果有一个新条目被添加到表B中,id = 1,那么我希望结果表自动扩展一列以容纳这个额外的数据点。 问题答案: 您
问题内容: 我有下表,该表为每个用户提供了多个电子邮件地址。 我需要将其展平为用户查询中的列。请根据创建日期为我提供“最新”的3个电子邮件地址。 问题答案: 使用从模块。
问题内容: 我正在尝试将行转置为列,但是没有找到任何好的答案。 这是我想要的示例: 输入表: 输出将是: 问题答案: 您需要枚举值以对其进行透视:
问题内容: 我有这种形式的查询返回值(查询返回超过50列)。 对于行值。我希望将这些详细信息转换为列并采用以下形状: 问题答案: 在纯 SQL中 ,它将需要大量编码,因为您将不得不手动放置 范围, 因为值和范围之间根本没有关系。如果存在关系,则可以使用 CASE 表达式并 动态 构建范围。 在 Oracle数据库11g第1版 及更高版本中,可以使用 UNPIVOT 上面,根据您的情况,您需要用现有
问题内容: 我正在处理数据透视表查询。架构如下 Sno,名称,地区 同一名称可能在许多地区出现,例如以样本数据为例 如您所见,我有一组4个不同的地区(CA,JB,MN,LP)。现在,我想通过将名称映射到区域来获取为其生成的数据透视表 我为此写了以下查询 但是,地区可能会增加,在这种情况下,我将不得不再次手动编辑查询并向其中添加新的地区。 我想知道是否存在一个查询,该查询可以动态获取不同地区的名称并
我有一个csv文件上传到一个S3桶,我拿起AWS胶水,然后使用雅典娜查询。CSV表的格式如下: