как создать производный атрибут в представлении - PullRequest
1 голос
/ 01 мая 2019

Я создаю представление для оценки сущности в SQL Oracle, и я создал в ней производный атрибут результат Я попробовал этот код, но он не работает.

оценка - это супер-сущность для трех суб-сущностей, которые являются диагностическими, суммирующими и формирующими, поэтому я создаю представление для этого assessment = diagnostic + summative + formative.

результат будет включать вычисление атрибутов оценки из трех предыдущих объектов.

это для разработчика Oracle SQL

создать оценку вида как

select asses_num ,d_score ,asses_type ,student_ID from diagnostic
union 
select asses_num ,s_score ,asses_type ,student_ID from summative
union
select asses_num ,f_score ,asses_type ,student_ID from formative
union
select (d_score+s_score+f_score) as result from diagnostic, summative, formative ;

Я ожидаю, что будет создано представление, включая результат как производный атрибут. Но у меня ошибка "В блоке запроса указано неверное количество столбцов результата"

1 Ответ

3 голосов
/ 01 мая 2019

"в блоке запросов указано неверное количество столбцов результатов"

Вы получаете ORA-01789, потому что все подзапросы в операторе UNION должны иметь одинаковую проекцию (количество столбцов, соответствующих типам данных). Ваш последний подзапрос отличается от других подзапросов.

Непонятно, почему вы все равно пытаетесь решить свою проблему с UNION. Возможно, имеет смысл использовать обычные объединения:

create view assessment as 
    select d.asses_num 
           , d.student_ID
           , d.d_score as diagnostic_score
           , s.s_score as summative_score
           , f.f_score as formative_score
           , (d.d_score + s.s_score + f.f_score) as result 
    from diagnostic d
         join summative s 
              on d.asses_num = s.asses_num
              and d.student_ID = s.student_ID
          join formative f 
              on d.asses_num = f.asses_num
              and d.student_ID = f.student_ID
;

Мои предположения (при отсутствии выборочных данных и структур):

  • записи существуют во всех трех таблицах, поэтому нам нужны внутренние, а не внешние объединения
  • ASSESS_TYPE не является критерием объединения, поскольку он определяет подтип дочерних объектов

Если они не верны или у вас есть дополнительные требования, пожалуйста, отредактируйте свой вопрос , чтобы включить уточняющие детали.

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