У меня есть следующий запрос, который написан в Oracle OCL:
SELECT
"P No","Name","Type","AID","Start","End","Day Ended","Worker","Team","Outcome"
FROM
(SELECT
O_ASSESSMENTS.ASM_SUBJECT_ID as "P No",
olm_bo.get_name(O_ASSESSMENTS.ASM_SUBJECT_ID,O_ASSESSMENTS.ASM_SUBJECT_IND) as "Name",
O_QUESTION_SET_APPLICATIONS.QSA_DESC as "Type",
O_ASSESSMENTS.ASM_ID as "AID",
O_ASSESSMENTS.ASM_START_DATE as "Start",
O_ASSESSMENTS.ASM_END_DATE as "End",
TO_CHAR(O_ASSESSMENTS.ASM_END_DATE, 'Day') as "Day Ended",
olm_bo.get_org_name(assessment_worker.RES_PARTY_OUN_ID) as "Worker",
olm_bo.get_per_name(assessment_worker.RES_PARTY_ID) as "Team",
olm_bo.get_ref_desc(O_ASSESSMENTS.ASM_OUTCOME,'ASM_OUTCOME') as "Outcome"
FROM
O_QUESTION_SET_APPLICATIONS,
O_RESPONSIBILITIES assessment_worker,
O_ASSESSMENTS
WHERE
( assessment_worker.RES_REC_ID(+)=O_ASSESSMENTS.ASM_ID AND assessment_worker.RES_REC_TYPE (+)='ASM' AND assessment_worker.RES_END_DATE IS NULL )
AND ( O_QUESTION_SET_APPLICATIONS.QSA_ID=O_ASSESSMENTS.ASM_QSA_ID )
AND
(olm_bo.get_org_name(assessment_worker.RES_PARTY_OUN_ID) = 'TEAM'
AND
olm_bo.get_ref_desc(O_ASSESSMENTS.ASM_OUTCOME,'ASM_OUTCOME') IN ('No Further Action')
AND
O_ASSESSMENTS.ASM_END_DATE Is Not Null
AND
O_QUESTION_SET_APPLICATIONS.QSA_ID IN ( 'TYPE1' )
AND
O_ASSESSMENTS.ASM_END_DATE >= trunc(sysdate-7)
)
ORDER BY
dbms_random.value)
WHERE ROWNUM <= 30
ORDER BY "End" DESC
В основном он возвращает закрытые оценки, которые были закрыты на прошлой неделе, а dbms_random.value возвращает 30 случайных записей. Тем не менее, я также хотел бы отсортировать окончательный вывод в порядке убывания по дате окончания. Однако, похоже, это не работает вообще, и я думаю, это как-то связано с dbms_random.value. Я попытался поместить порядок на «конец» выше dms_random.value, но, похоже, это тоже не сработало - оба примера кода будут работать, но они не возвращаются ни в каком порядке по дате. Не уверен, что я что-то ослепительно упускаю, но любые идеи будут высоко оценены.
Спасибо.
Edit:
Странно, это работает:
SELECT * FROM
(SELECT
O_ASSESSMENTS.ASM_SUBJECT_ID as "P_No",
olm_bo.get_name(O_ASSESSMENTS.ASM_SUBJECT_ID,O_ASSESSMENTS.ASM_SUBJECT_IND) as "Name",
O_QUESTION_SET_APPLICATIONS.QSA_DESC as "Type",
O_ASSESSMENTS.ASM_ID as "AID",
O_ASSESSMENTS.ASM_START_DATE as "Start",
O_ASSESSMENTS.ASM_END_DATE as "End",
TO_CHAR(O_ASSESSMENTS.ASM_END_DATE, 'Day') as "Day_Ended",
olm_bo.get_org_name(assessment_worker.RES_PARTY_OUN_ID) as "Team",
olm_bo.get_per_name(assessment_worker.RES_PARTY_ID) as "Worker",
olm_bo.get_ref_desc(O_ASSESSMENTS.ASM_OUTCOME,'ASM_OUTCOME') as "Outcome"
FROM
O_QUESTION_SET_APPLICATIONS,
O_RESPONSIBILITIES assessment_worker,
O_ASSESSMENTS
WHERE
( assessment_worker.RES_REC_ID(+)=O_ASSESSMENTS.ASM_ID AND assessment_worker.RES_REC_TYPE(+)='ASM' AND assessment_worker.RES_END_DATE IS NULL )
AND ( O_QUESTION_SET_APPLICATIONS.QSA_ID=O_ASSESSMENTS.ASM_QSA_ID )
AND
(nvl(olm_bo.get_org_name(assessment_worker.RES_PARTY_OUN_ID),'NULL') = 'TEAM'
AND
nvl(olm_bo.get_ref_desc(O_ASSESSMENTS.ASM_OUTCOME,'ASM_OUTCOME'),'NULL') IN ( 'CONTACT ONLY - all actions complete','No Further Action' )
AND
O_ASSESSMENTS.ASM_END_DATE Is Not Null
AND
nvl(O_QUESTION_SET_APPLICATIONS.QSA_ID,'NULL') IN ( 'TYPE1')
AND
O_ASSESSMENTS.ASM_END_DATE >= trunc(sysdate-7)
)
ORDER BY
dbms_random.value)
WHERE ROWNUM <= 30
ORDER BY "End" DESC
Так что не знаю, был ли сбой в исходном коде, или что-то было изменено, чтобы заставить его работать ...