通过对其他表中的列的操作在oracle中创建表

时间:2013-05-31 12:05:30

标签: sql oracle

我有一个表(比如table_1),它有一些类型编号的列。现在我想创建其他表(比如table_2),其中包含列(name,sum,avg,max,min),这些列将存储table_1中列的计算值。

现在我正在创建table_2,然后在table_2中为table_1中的每一列插入一行一次。

我想在单个语句更新中执行此操作。查询类似:“创建table_2(name,sum,avg,...)select ....”。 请帮我创建执行语句。

2 个答案:

答案 0 :(得分:1)

这是一项UNPIVOT行动。

SELECT colname, SUM(value), AVG(value), MIN(value), MAX(value)
  FROM table1
  UNPIVOT ( value FOR colname IN (x,y,..) )
  GROUP BY colname

其中“x,y,...”应该是源表中的实际列名。

已编辑添加

在11g之前的Oracle版本中,您可以自己动手打开它。两列示例:

WITH driver AS (
  SELECT level colnum FROM dual CONNECT BY level <= 2
)
SELECT
  CASE WHEN colnum=1 THEN 'x' WHEN colnum=2 THEN 'y' END colname,
  CASE WHEN colnum=1 THEN sum_x WHEN colnum=2 THEN sum_y END colsum,
  CASE WHEN colnum=1 THEN avg_x WHEN colnum=2 THEN avg_y END colavg
FROM driver
CROSS JOIN (
  SELECT SUM(x) sum_x, AVG(x) avg_x, SUM(y) sum_y, AVG(y) avg_y
    FROM mytable
  )
ORDER BY colnum

答案 1 :(得分:0)

这是合法的:你可以做到

CREATE TABLE myTable as

SELECT....
;

甚至使用公用表表达式:

CREATE TABLE myTable as
WITH myCte as
(
    SELECT....
)
SELECT....
;