2015-07-28 3 views
0

У меня есть запрос ниже:Oracle SQL вставить в заявлении ORA-00979

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

Я попытался использовать вставку в (выберите ...), но я не уверен, как заполнить 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; 

EDIT

Вот что мне теперь делать для одного значения (скажем, 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

Ваш вопрос на самом деле не имеет смысла. В предлагаемой таблице есть три столбца, но запрос возвращает только два. Образцы данных будут большой помощью к вопросу. –

+0

@GordonLinoff Да, я знаю, что я хочу в новой таблице третий столбец, сопоставленный с WHERE первого запроса. Таким образом, новая таблица имеет 2 значения, возвращаемые первым запросом, а также третье значение, которое будет в настоящее время в WHERE. – bbedward

+0

Если вы переходите от двух до трех столбцов, вам нужно указать значение для нового столбца. Чтобы упростить заполнение его значением по умолчанию и вернуться и обновить значение после копирования таблицы. – Nathan

ответ

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 

(Примечание: тестировался, так как нет данных образцов, не создавать скрипты, и т.д .. то есть ничего, чтобы пойти дальше:()

+0

Я обновил свой вопрос, может быть, это поможет – bbedward

+0

Хорошо, я прочитал ... похоже, что я все еще решил для вас? Ты это пробовал ? Если он не работает, обязательно убедитесь, что он делает/не делает, что вам нужно, и почему вы этого хотите. – Ditto

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 
Смежные вопросы