如何在 Oracle PLSQL 中透视表?

How to pivot a table in Oracle PLSQL?(如何在 Oracle PLSQL 中透视表?)
本文介绍了如何在 Oracle PLSQL 中透视表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我有一个表格如下:

KEY 1995    1996    1997    1998    1999    2000    2001    2002    2003
123 0       0       0       461     1188    2049    1056    377     295

我希望数据如下所示.

KEY SEQ_NBR SEQ_YR  VALUE_SUM
123 1       1995    0
123 2       1996    0
123 3       1997    0
123 4       1998    461
123 5       1999    1188
123 6       2000    2049
123 7       2001    1056
123 8       2002    377
123 9       2003    295

我使用的是 Oracle 12c.我尝试使用 Pivot 子句,但无法创建查询.

I am using Oracle 12c. I tried using Pivot clause but couldn't create the query.

有人可以帮我吗?

推荐答案

为了好玩:我用 PL/SQL 循环和动态 SQL 填充旧表中的新表.这不是我们经常做的事情,但为什么不为一次性任务做呢?

For the fun of it: I am filling the new table from the old one with a PL/SQL loop and dynamic SQL. This is nothing we would regularly do, but why not do it for a one-time task?

begin
  for col in
  (
    select column_name
    from user_tab_cols
    where table_name = 'OLDTABLE' and regexp_like(column_name, '^[[:digit:]]{4}$')
  ) loop
    execute immediate
      'insert into newtable (key, year, value)
       select key, ' || col.column_name || ', "' || col.column_name || '" from oldtable';
  end loop;
  commit;
end;

这篇关于如何在 Oracle PLSQL 中透视表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

Query with t(n) and multiple cross joins(使用 t(n) 和多个交叉连接进行查询)
Unpacking a binary string with TSQL(使用 TSQL 解包二进制字符串)
Max rows in SQL table where PK is INT 32 when seed starts at max negative value?(当种子以最大负值开始时,SQL 表中的最大行数其中 PK 为 INT 32?)
Inner Join and Group By in SQL with out an aggregate function.(SQL 中的内部连接和分组依据,没有聚合函数.)
Add a default constraint to an existing field with values(向具有值的现有字段添加默认约束)
SQL remove from running total(SQL 从运行总数中删除)