您好我有问题我不知道是否有人可以提供帮助。我有 在表中创建嵌套表和插入值。
CREATE OR REPLACE TYPE tt_hours AS OBJECT(hours INTEGER, data NUMBER);
/
CREATE OR REPLACE TYPE tt_day AS VARRAY(7) OF tt_hours;
/
CREATE TABLE NEM_RM16
(
DAY DATE,
VALUE_hours tt_day
);
INSERT INTO NEM_RM16
(day, value_hours)
VALUES
(TO_DATE('01/06/2012 22:00:34'),
tt_DAY(
tt_hours(1,0.025727),
tt_hours(2,0.012047),
tt_hours(3,0.012857),
tt_hours(4,0.012107),
tt_hours(5,0.012849),
tt_hours(6,0.01215),
tt_hours(7,0.0129)));
因此将在new_table中插入30行,每行代表本月(6月)中的1月1日。以上是第一行的示例,其中day = 01/06/2012,包含8小时的数据。
如何编写一个程序来查找所有特定日期的所有平均小时数,例如表中所有星期一的所有小时的平均值(上帝,我希望我有意义)。
结果应为7行(一周7天)
tt_hours (1, average over the month)
tt_hours (2, average over the month)
..........
第二张表:
CREATE TABLE old_table ( tDAY DATE, VALUE_thours tt_day );
我尝试使用以下内容插入。将结果插入旧表但不起作用。
insert into old_table (day, value_hours) values
(SELECT to_char(DAY, 'Day'),
hours, AVG(data) FROM NEM_RM16 n, TABLE(n.value_hours) v
GROUP BY to_char(DAY, 'Day'), hours);
例如,old_table在运行select语句后应在星期五有以下数据。小时和日期在嵌套表中,而tdate是DATE类型。正如您所看到的,结果是您的select语句产生的结果,但是被插入到相同的结构化表中。
tdate HOURS data
----------- ---------- ----------
Friday 1 0,025727
Friday 2 0,012047
Friday 3 0,012857
Friday 4 0,012107
Friday 5 0,012849
Friday 6 0,01215
Friday 7 0,0129
答案 0 :(得分:1)
您可以使用横向连接从嵌套表中检索值:
SQL> select n.day, v.hours, v.data from NEM_RM16 n, table(n.value_hours) v;
DAY HOURS DATA
----------- ---------- ----------
01/06/2012 1 0,025727
01/06/2012 2 0,012047
01/06/2012 3 0,012857
01/06/2012 4 0,012107
01/06/2012 5 0,012849
01/06/2012 6 0,01215
01/06/2012 7 0,0129
我不确定我是否真的理解你的问题,但从上面的查询中你可以运行任何聚合,例如:
SQL> SELECT to_char(DAY, 'Day') day_of_week, hours, AVG(data) avg_data
2 FROM NEM_RM16 n, TABLE(n.value_hours) v
3 GROUP BY to_char(DAY, 'Day'), hours;
DAY_OF_WEEK HOURS AVG_DATA
----------- ---------- ----------
Friday 1 0,025727
Friday 2 0,012047
Friday 3 0,012857
Friday 4 0,012107
Friday 5 0,012849
Friday 6 0,01215
Friday 7 0,0129
如果要重建嵌套表,请使用COLLECT,例如:
SELECT day_of_week, CAST(COLLECT(tt_hours(hours, avg_data)) AS tt_day)
FROM (SELECT to_char(DAY, 'Day') day_of_week, hours, AVG(data) avg_data
FROM NEM_RM16 n, TABLE(n.value_hours) v
GROUP BY to_char(DAY, 'Day'), hours)
GROUP BY day_of_week