Double Pivot в столбцах не работает - PullRequest
0 голосов
/ 03 января 2019

Я написал код, у которого в запросе есть две точки поворота, но он не может дать никакого вывода. Ошибка: ORA-00904: "THESEUS_ACTIVE": неверный идентификатор.Может ли кто-нибудь помочь мне в этом

SELECT company_id
, MAX(alt_rec_date) alt_rec_date
, rec_date
, MAX(STANDARD) STANDARD
, MAX(THESEUS) THESEUS
, CAST(NVL(MAX(STANDARD_Active), 0) AS NUMBER(1)) STANDARD_Active
, CAST(NVL(MAX(THESEUS_Active), 0) AS NUMBER(1)) THESEUS_Active  --the 
error is here in max(theseus_active)--
FROM (
**SELECT RH.company_id
      ,MAX(RH.alt_rec_date) alt_rec_date
      ,IT.type_code
      ,RH.alt_rec_code rec_code
      ,RH.rec_date
      , CAST(ITC.active AS NUMBER(10)) active
      ,IT.type_code || '_Active' active_type_code
FROM tblInvestTypeRecHist RH
    JOIN tblInvestType IT ON RH.type_code = IT.type_code
    JOIN (
        SELECT company_id, MAX(rec_date) rec_date
        FROM tblInvestTypeRecHist GROUP BY company_id
        ) LR
    ON RH.company_id = LR.company_id AND RH.rec_date = LR.rec_date
    JOIN tblInvestTypeComp ITC 
    ON RH.company_id = ITC.company_id AND IT.type_code = ITC.type_code
GROUP BY RH.company_id
      ,IT.type_code
      ,RH.alt_rec_code 
      ,RH.rec_date
      ,ITC.active**

) Data

PIVOT (
MAX(rec_code)
FOR type_code IN
('STANDARD','THESEUS')
)  pvt

PIVOT (
MAX(active)
FOR active_type_code IN
('STANDARD_Active','THESEUS_Active')
)  pvt

GROUP BY company_id, rec_date;

Как я могу решить эту проблему?

1 Ответ

0 голосов
/ 03 января 2019

Вы не указываете псевдонимы для поворотных столбцов, поэтому по умолчанию они заканчиваются как идентификаторы в кавычках, установленные для сопоставляемых значений; поэтому вы можете изменить начало запроса на:

SELECT company_id
, MAX(alt_rec_date) alt_rec_date
, rec_date
, MAX("'STANDARD'") STANDARD
, MAX("'THESEUS'") THESEUS
, CAST(NVL(MAX("'STANDARD_Active'"), 0) AS NUMBER(1)) STANDARD_Active
, CAST(NVL(MAX("'THESEUS_Active'"), 0) AS NUMBER(1)) THESEUS_Active
FROM (
...

Обратите внимание на двойные и одинарные кавычки, а также случай, точно совпадающий с созданной вами строкой; и что вы должны применять кавычки к столбцам из первого и второго стержней.

В качестве альтернативы и, возможно, более наглядно, укажите псевдонимы столбцов:

SELECT company_id
, MAX(alt_rec_date) alt_rec_date
, rec_date
, MAX(STANDARD) STANDARD
, MAX(THESEUS) THESEUS
, CAST(NVL(MAX(STANDARD_ACTIVE), 0) AS NUMBER(1)) STANDARD_Active
, CAST(NVL(MAX(THESEUS_ACTIVE), 0) AS NUMBER(1)) THESEUS_Active
FROM (
...
) Data

PIVOT (
MAX(rec_code)
FOR type_code IN
('STANDARD' as standard,'THESEUS' as theseus)
)  pvt

PIVOT (
MAX(active)
FOR active_type_code IN
('STANDARD_Active' as standard_active,'THESEUS_Active' as theseus_active)
)  pvt

GROUP BY company_id, rec_date;

Я не уверен, что вам на самом деле здесь нужны два шарнира; без выборочных данных и ожидаемых результатов я вполне могу что-то упустить, но похоже, что вы могли бы сделать:

...
) Data
PIVOT (
  MAX(rec_code), MAX(active) as active
  FOR type_code IN ('STANDARD' as standard,'THESEUS' as theseus)
)
GROUP BY company_id, rec_date;

Все это выглядит так, как будто это, вероятно, можно упростить.

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