Oracle 拼接列数据的方法

http://flforever1213.iteye.com/blog/982091
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 表中的多行数据按照指定规则转换为一行数据,可以使用 Oracle 的 PIVOT 和 UNPIVOT 操作。下面是一个简单的示例,将表中的多行数据按照 ID 进行行转拼接: ```sql -- 创建测试表 CREATE TABLE test_table ( id NUMBER, key VARCHAR2(10), value VARCHAR2(10) ); -- 插入测试数据 INSERT INTO test_table VALUES (1, 'A', 'a1'); INSERT INTO test_table VALUES (1, 'B', 'b1'); INSERT INTO test_table VALUES (1, 'C', 'c1'); INSERT INTO test_table VALUES (2, 'A', 'a2'); INSERT INTO test_table VALUES (2, 'B', 'b2'); INSERT INTO test_table VALUES (2, 'C', 'c2'); -- 行转拼接 SELECT * FROM ( SELECT id, key, value FROM test_table ) PIVOT ( MAX(value) FOR key IN ('A', 'B', 'C') ) ORDER BY id; ``` 以上代码中,首先创建了一个测试表 test_table,并插入了多行数据。然后使用 PIVOT 操作将表中的多行数据按照 ID 进行行转拼接,其中 MAX(value) 表示对于相同的 ID 和 key,取 value 的最大值(因为在这里只有一个值,所以实际上是取原始值)。最后按照 ID 排序输出结果。 如果需要将转换后的数据拼接成一行,可以使用 Oracle 的 LISTAGG 函数。以下是一个示例: ```sql -- 行转拼接拼接成一行 SELECT id, LISTAGG(a, ',') WITHIN GROUP (ORDER BY id) AS a, LISTAGG(b, ',') WITHIN GROUP (ORDER BY id) AS b, LISTAGG(c, ',') WITHIN GROUP (ORDER BY id) AS c FROM ( SELECT id, key, value FROM test_table ) PIVOT ( MAX(value) FOR key IN ('A' AS a, 'B' AS b, 'C' AS c) ) GROUP BY id; ``` 以上代码中,使用 PIVOT 将表中的多行数据按照 ID 进行行转拼接,并使用 AS 子句将名重命名为 a、b、c。然后使用 LISTAGG 函数将转换后的数据拼接成一行。最后按照 ID 分组输出结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值