code_junkie

need SQL complex query help

Nov 13th, 2011
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.34 KB | None | 0 0
  1. SELECT * FROM (SELECT
  2. mcat.CATALOG_ITEM_ID,
  3. mcat.CATALOG_ITEM_NAME ,
  4. mcat.DESCRIPTION,
  5. mcat.CATALOG_ITEM_TYPE,
  6. mcat.DELIVERY_METHOD,
  7. XMLElement("TRAINING_PLAN",XMLAttributes( TP.TPLAN_ID as "id" ),
  8. XMLELEMENT("COMPLETE_QUANTITY", TP.COMPLETE_QUANTITY),
  9. XMLELEMENT("COMPLETE_UNIT", TP.COMPLETE_UNIT),
  10. XMLElement("TOTAL_CREDITS", TP.numberOfCredits ),
  11. XMLELEMENT("IS_CREDIT_BASED", TP.IS_CREDIT_BASED),
  12. XMLELEMENT("IS_FOR_CERT", TP.IS_FOR_CERT),
  13. XMLELEMENT("ACCREDIT_ORG_NAME", TP.ACCRED_ORG_NAME),
  14. XMLELEMENT("ACCREDIT_ORG_ID", TP.accredit_org_id ),
  15. XMLElement("OBJECTIVE_LIST", TP.OBJECTIVE_LIST )
  16. ).extract('/').getClobVal() AS PLAN_LIST
  17.  
  18. FROM
  19. student_master_catalog mcat
  20. INNER JOIN
  21. (SELECT stu_tp.TPLAN_ID,
  22. stu_tp.COMPLETE_QUANTITY,
  23. stu_tp.COMPLETE_UNIT,
  24. stu_tp.TPLAN_XML_DATA.extract('//numberOfCredits/text()').getStringVal() as numberOfCredits,
  25. stu_tp.IS_CREDIT_BASED,
  26. stu_tp.IS_FOR_CERT,
  27. stu_oa.ACCRED_ORG_NAME,
  28. stu_tp.TPLAN_XML_DATA.extract('//accreditingOrg/text()').getStringVal() as accredit_org_id,
  29.  
  30.  
  31. objective_list.OBJECTIVE_LIST
  32. FROM
  33. student_training_catalog stu_tp
  34. LEFT OUTER JOIN
  35. stu_accrediting_org stu_oa on stu_tp.TPLAN_XML_DATA.extract('//accreditingOrg/text()').getStringVal() = stu_oa.ACCRED_ORG_ID
  36. INNER JOIN
  37. (SELECT *
  38. FROM
  39. (SELECT
  40. stu_tpo.TPLAN_ID AS OBJECTIVE_TPLAN_ID,
  41. XMLAgg(
  42. XMLElement("OBJECTIVE",
  43. XMLElement("OBJECTIVE_ID",stu_tpo.T_OBJECTIVE_ID ),
  44. XMLElement("OBJECTIVE_NAME",stu_to.T_OBJECTIVE_NAME ),
  45. XMLElement("OBJECTIVE_REQUIRED_CREDITS_OR_ACTIVITIES",stu_tpo.REQUIRED_CREDITS ),
  46. XMLElement("ITEM_ORDER", stu_tpo.ITEM_ORDER ),
  47. XMLElement("ACTIVITY_LIST", activity_list.ACTIVITY_LIST )
  48. )
  49. ) as OBJECTIVE_LIST
  50. FROM
  51. stu_TP_OBJECTIVE stu_tpo
  52. INNER JOIN
  53. stu_TRAINING_OBJECTIVE stu_to ON stu_tpo.T_OBJECTIVE_ID = stu_to.T_OBJECTIVE_ID
  54. INNER JOIN
  55. (SELECT *
  56. FROM
  57. (SELECT stu_toa.T_OBJECTIVE_ID AS ACTIVITY_TOBJ_ID, XMLAgg(
  58. XMLElement("ACTIVITY",
  59. XMLElement("ACTIVITY_ID",stu_toa.ACTIVITY_ID ),
  60. XMLElement("CATALOG_ID",COALESCE(stu_c.CATALOG_ID, COALESCE( stu_e.CATALOG_ID, stu_t.CATALOG_ID ) ) ),
  61. XMLElement("CATALOG_ITEM_ID",COALESCE(stu_c.CATALOG_ITEM_ID, COALESCE( stu_e.CATALOG_ITEM_ID, stu_t.CATALOG_ITEM_ID ) ) ),
  62. XMLElement("DELIVERY_METHOD",COALESCE(stu_c.DELIVERY_METHOD, COALESCE( stu_e.DELIVERY_METHOD, stu_t.DELIVERY_METHOD ) ) ),
  63. XMLElement("ACTIVITY_NAME",COALESCE(stu_c.COURSE_NAME, COALESCE( stu_e.EVENT_NAME, stu_t.TEST_NAME ) ) ),
  64. XMLElement("ACTIVITY_TYPE",initcap( stu_toa.ACTIVITY_TYPE ) ),
  65. XMLElement("IS_REQUIRED",stu_toa.IS_REQUIRED ),
  66. XMLElement("IS_PREFERRED",stu_toa.IS_PREFERRED ),
  67. XMLElement("NUMBER_OF_CREDITS",stu_lac.CREDIT_HOURS),
  68. XMLElement("ITEM_ORDER", stu_toa.ITEM_ORDER )
  69. )) as ACTIVITY_LIST
  70. FROM stu_TRAIN_OBJ_ACTIVITY stu_toa
  71. LEFT OUTER JOIN
  72. (
  73. SELECT distinct lac.LEARNING_ACTIVITY_ID, lac.CREDIT_HOURS
  74.  
  75.  
  76. FROM student_training_catalog tp
  77. INNER JOIN stu_TP_OBJECTIVE tpo on tp.TPLAN_ID = tpo.TPLAN_ID
  78. INNER JOIN stu_TRAIN_OBJ_ACTIVITY toa on tpo.T_OBJECTIVE_ID = toa.T_OBJECTIVE_ID
  79. INNER JOIN stu_LEARNINGACTIVITY_CREDITS lac on lac.LEARNING_ACTIVITY_ID = toa.ACTIVITY_ID and tp.TPLAN_XML_DATA.extract ('//accreditingOrg/text()').getStringVal() = lac.ACC_ORG_ID
  80. *where tp.tplan_id ='*************'*
  81. ) **stu_lac ON stu_lac.LEARNING_ACTIVITY_ID = stu_toa.ACTIVITY_ID ------>This Select returns correct no. of rows**
  82.  
  83. **I want to join the below nested SELECTS with stu_toa.ACTIVITY_ID.This would solve my issues
  84.  
  85. This below SELECT inside the LEFT OUTER JOIN is the Problem.it returns too much because 3 tables are joined directly without any value qualification**
  86. LEFT OUTER JOIN
  87. ( SELECT ch.COURSE_HISTORY_ID, stu_c.COURSE_NAME, mca.catalog_item_id, mca.catalog_id, mca.delivery_method
  88. FROM stu_COURSE stu_c
  89. **LEFT OUTER JOIN stu_course_history ch on stu_c.course_id = ch.ch_course_id -
  90. If i can qualify here with ch.ch_course_id = stu_toa.ACTIVITY_ID (stu_toa.ACTIVITY_ID from the above select with correct no. of rows )
  91. Here,i get erros because i cant access outside values inside a left outer join**
  92.  
  93. LEFT OUTER JOIN student_master_catalog mca on ch.course_history_id = mca.catalog_item_id
  94. ) stu_c ON stu_c.COURSE_HISTORY_ID = stu_toa.ACTIVITY_ID
  95.  
  96. LEFT OUTER JOIN
  97. (SELECT stu_e.EVENT_ID, stu_e.EVENT_NAME, mca.catalog_item_id, mca.catalog_id, mca.delivery_method FROM stu_EVENTS stu_e LEFT OUTER JOIN student_master_catalog mca on stu_e.event_Id = mca.catalog_item_id ) stu_e ON stu_e.EVENT_ID = stu_toa.ACTIVITY_ID
  98. LEFT OUTER JOIN
  99. (SELECT stu_t.TEST_HISTORY_ID, stu_t.TEST_NAME, mca.catalog_item_id, mca.catalog_id, mca.delivery_method FROM stu_TEST_HISTORY stu_t LEFT OUTER JOIN student_master_catalog mca on stu_t.test_history_id = mca.catalog_item_id) stu_t ON stu_t.test_history_id = stu_toa.ACTIVITY_ID
  100. GROUP BY stu_toa.T_OBJECTIVE_ID) ) activity_list ON activity_list.ACTIVITY_TOBJ_ID = stu_tpo.T_OBJECTIVE_ID
  101. GROUP BY stu_tpo.TPLAN_ID) ) objective_list ON objective_list.OBJECTIVE_TPLAN_ID = stu_tp.TPLAN_ID
  102. )TP ON TP.TPLAN_ID = mcat.CATALOG_ITEM_ID
  103. WHERE
  104. mcat.CATALOG_ITEM_ID = '*****************' and mcat.CATALOG_ORG_ID = '********')
  105.  
  106. LEFT OUTER JOIN
  107. ( SELECT *
  108.  
  109. FROM STUDENT_COURSE stu_c
  110.  
  111. LEFT OUTER JOIN STUDENT_history ch on stu_c.course_id = ch.ch_course_id
  112.  
  113. LEFT OUTER JOIN STUDENT_master stu_mca on ch.course_history_id = stu_mca.item_id
  114.  
  115. ) stu_c ON stu_c.HISTORY_ID = toa.ACTIVITY_ID ----->This table is joined earlier
  116.  
  117. LEFT OUTER JOIN
  118.  
  119. (SELECT c_e.EV_ID, c_e.EV_NAME, ma.item_id, ma.cata_id
Add Comment
Please, Sign In to add comment