2012-01-18 4 views
0

I가 오라클 SQL로 작성 다음 쿼리 :이 dbms_random.value을 사용하여 날짜별로 정렬 ... 오라클 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와 관련이 있습니다. dms_random.value 위에 "end"로 주문을 시도했지만 그 중 하나가 작동하지 않습니다 - 두 코드 예제가 모두 실행되지만 날짜순으로 반환되지는 않습니다. 내가 눈부신 아무것도 눈에 띄지는 모르겠지만, 모든 아이디어를 많이 주시면 감사하겠습니다.

감사합니다.

편집 :

기이이 작동 :

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 

은 그래서 원래 코드의 결함, 또는 뭔가가 있다면 아무 생각이 작동하도록 변경되지 않은 ...

답변

2

빠른 예제를 작성하면 SQL이 명시 적으로 확인되므로 가능한 수정 한 내용으로 인해 게시물에 문제가있는 것으로 보입니다. 나는 그것을 더 명확하게하기 위해 들여 쓰기했습니다.

SELECT * 
FROM 
    (
    SELECT 
     "P No","Name","Type","AID","Start" 
     ,"End","Day Ended","Worker","Team","Outcome" 
    FROM O_ASSESSMENTS 
    WHERE 
    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 

최종 닫는 대괄호는 아무 것도 아니므로 어떤 것이 맞지 않습니다. 예 : 함께 던졌다 :

select a.test_id 
from 
(
select test_id 
from tbl_Test 
order by dbms_random.value 
) a 
where rownum <= 10 
order by a.test_id 

외부 순서에 지정된 순서대로 예제 테이블에서 10 개의 임의 ID를 가져 왔습니다.

+0

원래 쿼리에 전체 쿼리를 포함하도록 업데이트했습니다. 문제가되는 부분을 제거한 것 같습니다. 그래도 내 쿼리에서 나에게 불량 브래킷이있는 것처럼 보이지만 쿼리가 실행 중입니다. 그 불량 브래킷을 꺼내면 오류가납니다. 늦어지고 있을지도 모르니까 두 번 확인해보고 알아낼 수 있는지 알아 보겠습니다. 응답 해 주셔서 고맙습니다. 적어도 작동해야한다는 것을 알고 있습니다. – bawpie

+0

그냥 다른 '명백한'하나, 최종 열을 확인하는 것은 날짜가 아닌 varchar입니까? – Andrew

+0

'끝'열과 관련이 있다고 생각하기 시작했습니다. 이것은 날짜로 정의되며, to_date에서 감싸려고하면 '입력 된 전체 문자열을 변환하기 전에 날짜 형식 그림이 종료됩니다. '. 나는 그저 거기에 집을 열어서 일을 열어보고 그 일을 명령 할 수 있다는 것을 알고 있습니다. 그래서 지금해야 할 일이 있습니다! – bawpie