Столбец неоднозначно определен при использовании pivot с подзапросом

Я пытаюсь запустить этот сводный запрос, чтобы отобразить даты в виде столбцов в следующем формате: «ММ / ДД / ГГГГ» и наличие каких-либо идентификаторов в каждой дате:

Столбец, содержащий даты: "DATE_POSTED" - DATA TYPE date. Столбец, содержащий идентификаторы, - "ID_INST" - ТИП ДАННЫХ varchar2.

Запрос:

SELECT *
FROM (SELECT ID_INST, DATE_POSTED
      FROM total.table1) PIVOT XML (COUNT (DATE_POSTED)
                                           FOR (DATE_POSTED)
                                           IN  (SELECT distinct DATE_POSTED
                                                  FROM total.table1));

Я получаю ошибку ORA-00918: столбец определен неоднозначно, я провел несколько поисков, но продолжаю получать эту ошибку. Не уверен, что мой подход полностью верен. P.S Я использую ключевое слово XML из-за того, что оно подсказало: пропущенное ключевое слово

Текущая таблица: Current table

Ожидаемый результат: Expected Result

Пожалуйста, покажите свои определения таблиц

OldProgrammer 31.10.2018 13:52

Не могли бы вы предоставить образцы данных и ожидать результата?

D-Shih 31.10.2018 13:53

Вы пробовали IN(ANY)? Я не понимаю, что использовать IN (SELECT distinct DATE_POSTED FROM total.table1) ...

Radagast81 31.10.2018 14:08

@ Radagast81 позволяет просто сказать, что в этой таблице больше столбцов, поэтому я не могу нигде искать, мне нужно специально искать идентификаторы в датах

Lorik Berisha 31.10.2018 14:17

@ D-Shih готово, пожалуйста, проверьте вопрос еще раз, я приложил несколько образцов скриншотов

Lorik Berisha 31.10.2018 14:17

@LorikBerisha Я думаю, вы ищете динамический поворот

D-Shih 31.10.2018 14:20

@LorikBerisha ключевое слово ANY в этом операторе просто означает, что вы создаете столбец для любого значения DATE_POSTED, которое совпадает с вашим подзапросом. Если вы хотите отфильтровать эти даты, вы также должны сделать это во внутреннем подзапросе, чтобы ключевое слово ANY предоставило вам то, что вы хотите ...

Radagast81 31.10.2018 14:42
1
7
524
1

Ответы 1

Попробуйте следующее:

SELECT *
  FROM (SELECT ID_INST, TO_CHAR(DATE_POSTED, 'DD-Mon')  DATE_POSTED
          FROM TOTAL.TABLE1)
  PIVOT XML (COUNT(DATE_POSTED)
             FOR DATE_POSTED IN (ANY))

Проблема может быть вызвана тем фактом, что эта дата также хранит информацию о времени в дополнение к дате.

Таким образом, вы получаете разные значения для DATE_POSTED, но преобразование в char приводит к тому же имени столбца, поскольку маска формата даты сокращает информацию о времени.

Другие вопросы по теме