0
我这是写在Oracle SQL下面的查询:使用DBMS_RANDOM.VALUE和按日期排序...的Oracle SQL
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有关。我已经试过把“end”放在dms_random.value上面,但是看起来并不工作 - 两个代码的例子都会运行,但是它们看起来并没有按日期顺序返回。不知道我是否失去了任何盲目显而易见的东西,但任何想法都将非常感激。
谢谢。
编辑:
奇怪的是,这个工程:
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
所以不知道是否有在原来代码中的故障,或者说已经改变,使其工作...
我已经更新了我的原始问题以包括完整的查询,因为也许有我剥离出来的问题。它仍然看起来像我的查询中,虽然有一个流氓支架,但它正在运行查询。如果我拿出那个流氓支架,我会得到一个错误。可能是因为它迟到了,所以我会仔细检查一下,看看我能否弄清楚。感谢您的回应,但至少我知道它'应该'工作。 – bawpie 2012-01-18 17:45:56
只需要检查另一个'显而易见的',End列是日期而不是varchar? – Andrew 2012-01-18 18:31:17
我开始认为这是与'结束'列有关 - 它被定义为一个日期,如果我试图把它包装在to_date中,我会在转换整个输入字符串之前得到一个关于日期格式图片结尾的错误”。我知道我可以在那里坚持一个计数来看待开放日期并按照这个顺序进行排序,所以现在可能要做的事情! – bawpie 2012-01-19 09:00:04