ORA-00904: «NO_OF_PROJ_PER_CON_PY»: неверный идентификатор - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь создать таблицу фактов, в которой будет отображаться количество проектов на одного консультанта в год. Он имеет 2 таблицы измерений 1 для времени (report_time_dim) и другую для консультантов (consultant_dim), а затем таблицу основных фактов (fact_table).

CREATE TABLE fact_table(
    fact_key INTEGER NOT NULL,
    consultant_key  INTEGER NOT NULL,
    time_key    INTEGER NOT NULL,
    no_of_projects_py   INTEGER,
    no_of_consultants_py    INTEGER,
    no_of_accounts_py   INTEGER,
    no_of_proj_per_con_py   INTEGER,
    fk1_time_key    INTEGER NOT NULL,
    fk2_consultant_key  INTEGER NOT NULL,
    -- Specify the PRIMARY KEY constraint for table "fact_table".
    -- This indicates which attribute(s) uniquely identify each row of data.
    CONSTRAINT  pk_fact_table PRIMARY KEY (consultant_key,time_key)
);

CREATE TABLE report_time_dim(
    time_key    INTEGER NOT NULL,
    year    INTEGER,
    -- Specify the PRIMARY KEY constraint for table "time_dim".
    -- This indicates which attribute(s) uniquely identify each row of data.
    CONSTRAINT  pk_report_time_dim PRIMARY KEY (time_key)
);

CREATE TABLE consultant_dim(
    consultant_key  INTEGER NOT NULL,
    project_id  INTEGER,
    consultant_id   INTEGER,
    -- Specify the PRIMARY KEY constraint for table "consultant_dim".
    -- This indicates which attribute(s) uniquely identify each row of data.
    CONSTRAINT  pk_consultant_dim PRIMARY KEY (consultant_key)
);

Каждая таблица имеет свой собственный суррогатный ключ, и мне удалось успешно заполнить таблицы времени и консультантов, однако у меня возникла проблема с таблицей фактов. Когда я пытаюсь заполнить его, я получаю ошибку ORA-00904: «NO_OF_PROJ_PER_CON_PY»: неверный идентификатор. Я не уверен, как я могу исправить это и заполнить таблицу фактов, чтобы она отображала информацию, которую я хочу. Любая помощь будет оценена.

--populate fact_table

--table that lists consultant ids, project ids and years
DROP TABLE temp_fact1;
CREATE TABLE temp_fact1 AS 
SELECT project_id, fk2_consultant_id, to_number(to_char(lds_project.pj_actual_start_date, 'YYYY')) as which_year FROM lds_project;

--display table
SELECT * FROM temp_fact1;

--list that counts the number of projects for each consultant and specify the year
DROP TABLE temp_fact2;
CREATE TABLE temp_fact2 AS
SELECT which_year, fk2_consultant_id, COUNT(*) project_id FROM temp_fact1 GROUP by fk2_consultant_id, which_year;

--display table
SELECT * FROM temp_fact2;

--fact table surrogate key
DROP SEQUENCE fact_seq;
CREATE SEQUENCE fact_seq
START WITH 1
INCREMENT BY 1
MAXVALUE 1000000
MINVALUE 1
NOCACHE
NOCYCLE;

--load data

INSERT INTO fact_table (fact_key, consultant_key, time_key, no_of_proj_per_con_py) 
SELECT fact_seq.nextval, consultant_key, report_time_dim.time_key, no_of_proj_per_con_py FROM temp_fact2, report_time_dim WHERE temp_fact2.which_year = report_time_dim.year;

1 Ответ

0 голосов
/ 20 ноября 2018

Попробуйте просто запустить этот выбор самостоятельно - это последняя строка в вашем скрипте.

SELECT fact_seq.nextval, 
       consultant_key, 
       report_time_dim.time_key, 
       no_of_proj_per_con_py 
FROM temp_fact2, report_time_dim 
WHERE temp_fact2.which_year = report_time_dim.year;

Не похоже, что у TEMP_FACT2 или REPORT_TIME_DIM есть столбец с именем no_of_proj_per_con_py.Я не уверен, откуда вы хотите получить эти данные, на самом деле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...