我有这种形式的查询返回值(查询返回超过50列)。
1-99transval 100-200transval 200-300transval ... 1-99nontransval 100...
50 90 80 67 58
对于行值。我希望将这些详细信息转换为列并采用以下形状:
Range Transval NonTransval
1-99 50 67
100-200 90 58
在纯 SQL中 ,它将需要大量编码,因为您将不得不手动放置 范围, 因为值和范围之间根本没有关系。如果存在关系,则可以使用 CASE
表达式并 动态 构建范围。
SQL> WITH DATA AS
2 (SELECT 50 "1-99transval",
3 90 "100-200transval",
4 80 "200-300transval",
5 67 "1-99nontransval",
6 58 "100-200nontransval",
7 88 "200-300nontransval"
8 FROM dual
9 )
10 SELECT '1-99' range,
11 "1-99transval" transval,
12 "1-99nontransval" nontransval
13 FROM DATA
14 UNION
15 SELECT '100-200' range,
16 "100-200transval",
17 "100-200nontransval" nontransval
18 FROM DATA
19 UNION
20 SELECT '200-300' range,
21 "200-300transval",
22 "200-300nontransval" nontransval
23 FROM DATA;
RANGE TRANSVAL NONTRANSVAL
------- ---------- -----------
1-99 50 67
100-200 90 58
200-300 80 88
在 Oracle数据库11g第1版 及更高版本中,可以使用 UNPIVOT
SQL> WITH DATA AS
2 (SELECT 50 "1-99transval",
3 90 "100-200transval",
4 80 "200-300transval",
5 67 "1-99nontransval",
6 58 "100-200nontransval",
7 88 "200-300nontransval"
8 FROM dual
9 )
10 SELECT *
11 FROM DATA
12 UNPIVOT( (transval,nontransval)
13 FOR RANGE IN ( ("1-99transval","1-99nontransval") AS '1-99'
14 ,("100-200transval","100-200nontransval") AS '100-200'
15 ,("200-300transval","200-300nontransval") AS '200-300'));
RANGE TRANSVAL NONTRANSVAL
------- ---------- -----------
1-99 50 67
100-200 90 58
200-300 80 88
上面,根据您的情况,您需要用现有查询作为 子查询* 替换 WITH 子句。您需要在 UNION中 包括其他列。 ***
在 PL / SQL中* ,您可以(ab) 立即 使用 EXECUTE 并通过在 动态sql中 提取 列名称
来获取“范围” 。
*
虽然,修改/重写尚未显示的现有查询会更好。
问题内容: 我有下表,该表为每个用户提供了多个电子邮件地址。 我需要将其展平为用户查询中的列。请根据创建日期为我提供“最新”的3个电子邮件地址。 问题答案: 使用从模块。
问题内容: 我正在尝试将行转置为列,但是没有找到任何好的答案。 这是我想要的示例: 输入表: 输出将是: 问题答案: 您需要枚举值以对其进行透视:
问题内容: 我想知道如何逆转置成: 那么,如何只考虑值> 0 来转置结果in中的列? 问题答案: MySQL没有UNPIVOT函数,但是您可以使用将列转换为行。 基本语法为: 对于您的情况,您声明需要动态列的解决方案。如果真是这样,那么您将需要使用准备好的语句来生成动态SQL: 参见带有演示的SQL Fiddle
我有一个csv文件上传到一个S3桶,我拿起AWS胶水,然后使用雅典娜查询。CSV表的格式如下:
问题内容: 如何在MySQL查询中将行转换为列? 问题答案: 您可以使用将行转换 为 列,但不能以任何自动方式转置整个结果集。您可以编写一个查询来手动生成每个列,或者在应用程序中执行。 这是有关编写复杂查询以模拟换位的教程: http://www.artfulsoftware.com/infotree/queries.php#78
问题内容: 我有一个简单的查询,它产生以下结果: 我想将行转置为列。 我了解mysql没有枢轴功能,因此需要工会,但不能100%确定。 先谢谢您的帮助。 问题答案: 您可以使用这样的交叉表来做到这一点- 另外,您应该将transporttype值移动到查找表中,并在该表中包含transporttype_id。