就业状态自动感知-视图.sql 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. -- ============================================================
  2. -- 就业状态自动感知 - 视图SQL(达梦DM8)
  3. -- ============================================================
  4. -- ============================================================
  5. -- 视图1:企业就业状态感知视图
  6. -- 聚合企业信息 + 岗位信息
  7. -- ============================================================
  8. CREATE OR REPLACE VIEW V_ENTERPRISE_EMPLOYMENT_STATUS AS
  9. SELECT
  10. ei.ID,
  11. ei.UNIFIED_CREDIT_CODE,
  12. ei.COMPANY_NAME,
  13. ei.REG_ADDR_DISTRICT AS DISTRICT,
  14. ei.INDUSTRY,
  15. ei.STAFF_SIZE AS ENTERPRISE_SCALE,
  16. ei.BUSINESS_STATUS AS ENTERPRISE_STATUS,
  17. (SELECT COUNT(*) FROM POST_INFO pi WHERE pi.ENTERPRISE_ID = ei.ID) AS TOTAL_POST_COUNT,
  18. (SELECT COUNT(*) FROM POST_INFO pi WHERE pi.ENTERPRISE_ID = ei.ID
  19. AND (pi.POST_VALID_DATE IS NULL OR pi.POST_VALID_DATE >= SYSDATE)) AS ACTIVE_POST_COUNT,
  20. (SELECT COUNT(*) FROM POST_INFO pi WHERE pi.ENTERPRISE_ID = ei.ID
  21. AND pi.POST_VALID_DATE IS NOT NULL AND pi.POST_VALID_DATE < SYSDATE) AS EXPIRED_POST_COUNT,
  22. NULL AS REGISTERED_EMPLOYEE_COUNT,
  23. (SELECT AVG((pi2.SALARY_MIN + pi2.SALARY_MAX) / 2) FROM POST_INFO pi2
  24. WHERE pi2.ENTERPRISE_ID = ei.ID
  25. AND (pi2.POST_VALID_DATE IS NULL OR pi2.POST_VALID_DATE >= SYSDATE)
  26. AND pi2.SALARY_MIN IS NOT NULL AND pi2.SALARY_MAX IS NOT NULL) AS AVERAGE_SALARY,
  27. esl.CUSTOM_TAGS,
  28. esl.LAST_NOTICE_TIME,
  29. ei.CREATE_BY,
  30. ei.CREATE_TIME,
  31. ei.UPDATE_BY,
  32. ei.UPDATE_TIME,
  33. ei.SYS_ORG_CODE
  34. FROM ENTERPRISE_INFO ei
  35. LEFT JOIN ENTERPRISE_STATUS_LOCAL esl ON ei.ID = esl.ENTERPRISE_ID;
  36. COMMENT ON VIEW V_ENTERPRISE_EMPLOYMENT_STATUS IS '企业就业状态感知视图';
  37. -- ============================================================
  38. -- 视图2:个人就业状态感知视图
  39. -- 聚合个人信息 + 就业/失业登记统计
  40. -- ============================================================
  41. CREATE OR REPLACE VIEW V_PERSONAL_EMPLOYMENT_STATUS AS
  42. SELECT
  43. pi.ID,
  44. pi.ID_NUMBER,
  45. pi.FULL_NAME,
  46. pi.HOUSEHOLD_LOCATION AS HOUSEHOLD_DISTRICT,
  47. pi.GENDER,
  48. pi.EDUCATION,
  49. FLOOR(MONTHS_BETWEEN(SYSDATE, pi.BIRTH_DATE) / 12) AS AGE,
  50. pi.JOB_SEARCH_STATUS,
  51. CASE
  52. WHEN er.PERSONAL_ID IS NOT NULL AND er.EMPLOY_COUNT > 0 THEN '就业中'
  53. WHEN ur.PERSONAL_ID IS NOT NULL AND ur.UNEMPLOY_COUNT > 0 THEN '失业中'
  54. ELSE '未就业'
  55. END AS EMPLOYMENT_STATUS,
  56. NVL(er.EMPLOY_COUNT, 0) AS EMPLOY_REG_COUNT,
  57. NVL(ur.UNEMPLOY_COUNT, 0) AS UNEMPLOY_REG_COUNT,
  58. NULL AS SOCIAL_INSURANCE_STATUS,
  59. psl.CUSTOM_TAGS,
  60. psl.LAST_NOTICE_TIME,
  61. pi.CREATE_BY,
  62. pi.CREATE_TIME,
  63. pi.UPDATE_BY,
  64. pi.UPDATE_TIME,
  65. pi.SYS_ORG_CODE
  66. FROM PERSONAL_INFO pi
  67. LEFT JOIN PERSONAL_STATUS_LOCAL psl ON pi.ID = psl.PERSONAL_ID
  68. LEFT JOIN (
  69. SELECT PERSONAL_ID, COUNT(*) AS EMPLOY_COUNT
  70. FROM EMPLOYMENT_RECORD
  71. GROUP BY PERSONAL_ID
  72. ) er ON pi.ID = er.PERSONAL_ID
  73. LEFT JOIN (
  74. SELECT PERSONAL_ID, COUNT(*) AS UNEMPLOY_COUNT
  75. FROM UNEMPLOYMENT_RECORD
  76. GROUP BY PERSONAL_ID
  77. ) ur ON pi.ID = ur.PERSONAL_ID;
  78. COMMENT ON VIEW V_PERSONAL_EMPLOYMENT_STATUS IS '个人就业状态感知视图';