如何在视图内部创建派生属性

时间:2019-05-01 06:10:58

标签: sql oracle

我正在SQL Server中为评估实体创建视图,并在其中尝试了此代码,但是在其中创建了派生属性 result

>

评估是三个子实体的超级实体,这三个子实体是诊断性的,总结性的和形成性的,这就是我为之创建视图的原因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 个答案:

答案 0 :(得分:3)

  

“查询块的结果列数不正确”

之所以会收到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不是联接条件,因为它定义了子实体的子类型

如果这些不正确或您还有其他要求,请编辑您的问题以包括详细信息。