我的查询如下:
SELECT count(*) AS my_table_count
,my_table_date_value
FROM my_table
WHERE my_table_value = 500
GROUP BY my_table_date_value
这将返回计数的数组/两列表以及值为500
的日期。这就是我想要的。
但是,我为上述查询的结果创建了一个这样的表:
CREATE TABLE my_new_table (
my_table_count NUMBER(10)
,my_table_date_value DATE
,my_table_value NUMBER(38)
)
我想要做的是用第一个查询中的所有数据填充新表,其中my_table_value > 0
我尝试使用insert into(select ...),但我不确定如何以这种方式填充my_table_value
。我想从1到max(my_table_value)
进行迭代会这样做,但我不确定如何在Oracle SQL中编写它。
我想要的结果是我可以查询my_new_table
而不是使用第一个查询,如下所示:
SELECT my_table_count
,my_table_date_value
FROM my_new_table
WHERE my_table_value = 500;
修改
这是我现在为一个值(比如500)做的事情。我想要做的就是返回并在表格中获得值0-499。
SET my_value = 500;
SET sqlString = 'select COUNT(*) AS MY_COUNT,MY_DATE from MY_TABLE where MY_VALUE=? group by MY_DATE';
SET rows[] = <query result, with my_value = 500>
DECLARE index INTEGER 1;
FOR result as r.rows[] DO
SET count = result.MY_COUNT;
SET my_date = result.MY_DATE;
insert into MY_NEW_TABLE(MY_COUNT,MY_DATE,MY_VALUE)
VALUES(count,my_date,my_value);
SET index = index + 1;
END FOR;
我想做的就是修改它,所以它插入从1到最大的所有内容(my_value)
答案 0 :(得分:3)
我不完全确定这是你所追求的,但听起来你想把所有粗略的数据都抓到你的“my_new_table”中,然后再筛选出来。
insert into my_new_table
( my_table_count,
my_table_date_value,
my_table_value )
select count(*) as my_table_count,
my_table_date_value ,
my_table_value
from my_table
where my_table_value > 0
group by my_table_date_value,
my_table_value
(注意:未经测试,因为没有样本数据,没有创建脚本等等。即没有什么可继续:()
答案 1 :(得分:1)
您可以使用create table as select
。这样,您可以将新列添加到新表中。此外,如果发生变化,您可以更改表格。
create table my_new_table as
select count(*) as my_table_count,my_table_date_value,my_table_value
from my_table
where my_table_value = 500 --add more conditions when needed
group by my_table_date_value