数据库sql经验--视图的创建实例

本人工作中亲自写的视图,看看例子胜于废话一堆:

create or replace view v_stu_work as
select h."ID",h."APPRAISE_STATE",h."CRAPPRAISE_STATE",h."STUCODE",h."SUBMIT_STATE",h."LESSON_ID",
h."STU_SATISFIED_DEGREE",h."ASSISTANT_ID",h."TEACHER_ID",h."RANK",h."SORT",h."APPRAISE",h."WORK_NUM",
h."WORK_DESCRIPTION",h."WORK_PICTURE",h."GUIDE_DESCRIPTION",h."WORK_CATEGORY",h."WORK_SCORE",
h."CR_APPRAISE",h."ADD_DATE",h."GUIDE_DESCRIPTION_DATE",h."CR_APPRAISE_DATE",h."SCORE_TA",h."WORK_TITLE",
h."LECTURENAME",h."DELECTURE_ID",h."COURSENAME",h."COURSE_ID",h."CLASSNAME",h."CLASS_ID"
,case
when k.cr_id is null then null
  else k.cr_id
  end  crid
  ,case
  when k.cr_id is null then null
    else (
        select j.REAL_NAME from ps_user j
        where j.USER_ID=k.cr_id
      )
      end crname
from
(
  select a."ID",
  case
    when a.appraise is not null then 'Y'
      else 'N'
        end "APPRAISE_STATE",
        case
    when a.cr_appraise is not null then 'Y'
      else 'N'
        end "CRAPPRAISE_STATE",a."STUCODE",a."SUBMIT_STATE",a."LESSON_ID",a."STU_SATISFIED_DEGREE",a."ASSISTANT_ID",a."TEACHER_ID",a."RANK",a."SORT",a."APPRAISE",a."WORK_NUM",a."WORK_DESCRIPTION",a."WORK_PICTURE",a."GUIDE_DESCRIPTION",a."WORK_CATEGORY",a."WORK_SCORE",a."CR_APPRAISE",a."ADD_DATE",a."GUIDE_DESCRIPTION_DATE",a."CR_APPRAISE_DATE",a."SCORE_TA",a."WORK_TITLE",g.lecturename,g.lesson_id delecture_id,g.coursename,g.course_id,g.classname,g.class_id
   from stu_workinfo a,
  (
      select c.*,d.name lecturename,e.name coursename,f.class_name classname from
      stu_lesson c,stu_deflesson d,
      stu_course e,stu_class f
      where c.lesson_id=d.id
      and c.course_id=e.id
      and c.class_id=f.id
  ) g
  where a.lesson_id=g.id
) h,stu_student k
where h.stucode=k.stucode;


CREATE OR REPLACE VIEW V_STU_CR AS
SELECT A."USER_ID",A."REAL_NAME",A."USER_NAME",A."PASSWORD",A."USER_TYPE",A."SEX",A."CERT_TYPE",A."CERT_NUM",A."EMAIL",A."PHONE",A."MOBILE",A."ADDRESS",A."POSTCODE",A."JOB_TITLE",A."STATUS",A."POS_NUM",A."CTIME",A."DAYS",B."USERS_ID",B."BIRTHDATE",B."DEGREE",B."TITLE_INFO",B."PHOTO",B."EMPIRIC_VALUE",B."FEATURE",B."CUS_SATISFIED_DEGREE",B."TEACH_SERVER_SATISFIED_DEGREE",B."ORDER_NUM",B."POPULAR",B."OLD_SATISFIED",B."TEACHING_LEVEL",B."TEACHING_STORY",B."HUMOR_INDEX",B."EMOTION_INDEX",B."PHILOSOPHY_INDEX",B."SIMPLE_INDEX",B."TEACHING_COURSE",B."CR_LEVEL",B."REMARK",B."ENTRY_DATE",
CASE
     WHEN H.DEPT_TYPE='DQ' THEN H.dept_id
END  DQ_ID,
CASE
     WHEN H.CENTER_TYPE='ZX' THEN H.CENTER_ID
END  ZX_ID,
D.FLAG ROLE_FLAG
FROM YGWOA.PS_USER A LEFT OUTER JOIN STU_USEREXPAN B ON A.USER_ID=B.USERS_ID,
PS_ROLE_USER C,PS_ROLE D,ps_view_dept_position H
WHERE A.USER_ID=C.USER_ID and C.ROLE_ID=D.ID AND A.USER_ID=H.user_id
AND D.FLAG='CR';

CREATE OR REPLACE VIEW V_STU_TA AS
SELECT H."USER_ID",H."REAL_NAME",H."BIRTH_DATE",H."USER_NAME",H."PASSWORD",H."USER_TYPE",H."SEX",H."CERT_TYPE",H."CERT_NUM",H."EMAIL",H."PHONE",H."MOBILE",H."ADDRESS",H."POSTCODE",H."JOB_TITLE",H."STATUS",H."POS_NUM",H."CTIME",H."DAYS",H."USERS_ID",H."BIRTHDATE",H."DEGREE",H."TITLE_INFO",H."PHOTO",H."EMPIRIC_VALUE",H."FEATURE",H."CUS_SATISFIED_DEGREE",H."TEACH_SERVER_SATISFIED_DEGREE",H."ORDER_NUM",H."POPULAR",H."OLD_SATISFIED",H."TEACHING_LEVEL",H."TEACHING_STORY",H."HUMOR_INDEX",H."EMOTION_INDEX",H."PHILOSOPHY_INDEX",H."SIMPLE_INDEX",H."TEACHING_COURSE",H."CR_LEVEL",H."REMARK",H."ENTRY_DATE"
,CASE
     WHEN H."EDIT_DATE" is null THEN to_date('1111-11-11','yyyy-mm-dd')
       ELSE H."EDIT_DATE"
END  EDIT_DATE,
CASE
     WHEN K.DEPT_TYPE='DQ' THEN K.DEPT_ID
END  DQ_ID,
CASE
     WHEN K.CENTER_TYPE='ZX' THEN K.CENTER_ID
END  ZX_ID
,K.FLAG ROLE_FLAG
,K.DEPT_AREA
from

(
select A.*,B.*
FROM PS_USER A LEFT OUTER JOIN STU_USEREXPAN B ON A.USER_ID=B.USERS_ID
) H,
(
    select t.*,a.role_id,a.user_id user_id2,b.id bid,b.flag  from ps_view_dept_position t ,ps_role_user a ,ps_role b
  where t.DEPT_TYPE='DQ' and t.CENTER_ID is null  and t.user_id=a.user_id and  a.role_id=b.id and b.flag in ('TA','STU_TA')
) K
WHERE H.USER_ID=K.USER_ID;

CREATE OR REPLACE VIEW V_STU_TEACHER AS
SELECT A."USER_ID",A."REAL_NAME",A."USER_NAME",A."BIRTH_DATE",A."PASSWORD",A."USER_TYPE",A."SEX",A."CERT_TYPE",A."CERT_NUM",A."EMAIL",A."PHONE",A."MOBILE",A."ADDRESS",A."POSTCODE",A."JOB_TITLE",A."STATUS",A."POS_NUM",A."CTIME",A."DAYS",B."USERS_ID",B."BIRTHDATE",A."NAME" "DEGREE",B."TITLE_INFO",B."PHOTO",B."EMPIRIC_VALUE",B."FEATURE",B."CUS_SATISFIED_DEGREE",B."TEACH_SERVER_SATISFIED_DEGREE",B."ORDER_NUM",B."POPULAR",B."OLD_SATISFIED",B."TEACHING_LEVEL",B."TEACHING_STORY",B."HUMOR_INDEX",B."EMOTION_INDEX",B."PHILOSOPHY_INDEX",B."SIMPLE_INDEX",B."TEACHING_COURSE",B."CR_LEVEL",B."REMARK",B."ENTRY_DATE",B."TEACHER_LEADER",
CASE
     WHEN B."EDIT_DATE" is null THEN to_date('1111-11-11','yyyy-mm-dd')
       ELSE B."EDIT_DATE"
END  EDIT_DATE,
CASE
     WHEN H.DEPT_TYPE='DQ' THEN H.dept_id
END  DQ_ID,
CASE
     WHEN H.CENTER_TYPE='ZX' THEN H.CENTER_ID
END  ZX_ID,
H.DEPT_AREA,
D.FLAG ROLE_FLAG
FROM PS_USER A LEFT OUTER JOIN STU_USEREXPAN B ON A.USER_ID=B.USERS_ID,
PS_ROLE_USER C,PS_ROLE D,ps_view_dept_position H
WHERE A.USER_ID=C.USER_ID and C.ROLE_ID=D.ID and A.User_Id=H.user_id
AND D.FLAG='T' order by A.User_Id;


create or replace view v_stu_teacherscore as
select t."ID",t."STUCODE",t."LESSON_ID",t."EXPERT_ID",t."SCORE",t."TYPE",t."CONTENT",t."TIME",t."ID2",t."TEACHER_ID",t."COURSE_ID",k.name,k.theme from
 (
    select f.ID,f.STUCODE,f.LESSON_ID,f.EXPERT_ID,f.SCORE,f.TYPE,f.CONTENT,f.TIME,f.USERTYPE,f.CLASS_ID,
    f.CLASS_ID,f.COURSE_ID COURSE_ID2
    ,g.id id2,g.teacher_id,g.course_id from
      (  select d.* from
          (  select * from stu_appraise c where c.lesson_id in
            ( select b.id from stu_lesson b where b.class_id in
                (
                  select a.id from stu_class a
                )
             )
          ) d ,stu_lesson e
        where e.id=d.lesson_id
         ) f,stu_class g
    where f.id=g.course_id
     ) t ,STU_COURSE k
 where t.course_id=k.id;

CREATE OR REPLACE VIEW V_STUINFO_CR AS
SELECT A."USER_ID",A."REAL_NAME",A."USER_NAME",A."SEX",A."EMAIL",A."PHONE",A."MOBILE",
A."ADDRESS",A."BIRTHDATE",A."DEGREE",A."CR_LEVEL",A."CUS_SATISFIED_DEGREE",
A."REMARK",A."ENTRY_DATE",A.DQ_ID,A.ZX_ID,B.STUOFCR
FROM V_STU_CR A,(SELECT COUNT(*) STUOFCR,CR_ID FROM STU_STUDENT GROUP BY CR_ID) B
WHERE A.USER_ID=B.CR_ID;


CREATE OR REPLACE VIEW V_STUINFO_TA AS
SELECT A."USER_ID",A."REAL_NAME",A."USER_NAME",A."SEX",A."EMAIL",A."PHONE",A."DQ_ID",A."ZX_ID",A."BIRTH_DATE",
A."MOBILE",A."ADDRESS",A."BIRTHDATE",A."REMARK",A."ENTRY_DATE"
FROM V_STU_TA A;


CREATE OR REPLACE VIEW V_STUINFO_TEACHER AS
SELECT A."USER_ID",A."REAL_NAME",A."SEX",A."EMAIL",A."PHONE",A."MOBILE",
A."BIRTHDATE",A."DEGREE",A."TITLE_INFO",A."PHOTO",A."TEACHING_COURSE",A."DQ_ID",A."BIRTH_DATE"
FROM V_STU_TEACHER A;




你可能感兴趣的:(数据库sql经验--视图的创建实例)