我有一个表(比如table_1),它有一些类型编号的列。现在我想创建其他表(比如table_2),其中包含列(name,sum,avg,max,min),这些列将存储table_1中列的计算值。
现在我正在创建table_2,然后在table_2中为table_1中的每一列插入一行一次。
我想在单个语句更新中执行此操作。查询类似:“创建table_2(name,sum,avg,...)select ....”。 请帮我创建执行语句。
答案 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....
;