oracle 行转列 拼接,oracle 行转列 拼接

做一张数据分析报表的时候,碰到一个问题,立刻想建一张临时表,然后再次存储,这样做的好处是查询时简便,坏处是需要写一个存储来定时执行,仔细想了想,第二个解决方案,行转列,合并出结果。

需求大概: 通过多表查询,得出每个城市每个月的销售数量,销售额,成本,售罄率,折扣率,查询后结果如下:

城市

时间

销售数量

销售额

北京

1403

22222

33333333

长沙

1311

11111

11111111

济南

1312

482809

1079808.12

柳州

1311

21762

442143

柳州

1403

84390

18814.5

宁波

1403

11546

21355.56

深圳

1401

195403

76399.94

深圳

1402

200279

82277.14

武汉

1401

1066

7896.56

武汉

1403

12625

11048.66

湘潭

1311

77231

696

  • 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、付费专栏及课程。

余额充值