2016-06-10 2 views
1

지난 12 개월 동안 평균을 표시하려고하지만 6 월/7 월에 대한 데이터가 없으므로 해당 달의 제목을 표시하려면 0을 이 공식 등오라클 - 해당 월의 데이터가없는 경우 0을 표시합니다.

select to_char(Months.Period,'YYYY/MM') As Period, coalesce(avg(ec.hours_reset),0) as AvgOfHOURSReset, coalesce(AVG(ec.cycles_reset),0) as AvgofCycles_Reset, Coalesce(AVG(ec.days_reset),0) as AvgofDAYS_Reset 
from (select distinct reset_date as Period from engineering_compliance 
where reset_date between '01/JUN/15' and '31/MAY/16') Months 
left outer join engineering_compliance ec on ec.reset_date = months.Period 
WHERE EC.EO = 'AT CHECK' 
group by to_char(Months.Period,'YYYY/MM') 
order by to_char(Months.Period,'YYYY/MM') 

; 
(select distinct to_char(reset_date,'YYYY/MM') as Period from engineering_compliance 
where reset_date between '01/JUN/15' and '31/MAY/16') Months; 

답변

1

그 쿼리가 작동에서 멀리 아니라, 꽤 좋은 차트를 던지고 있도록 10 행 5 월 - 현재 단지 8 월 보여주는 것 3 열

.

Months 테이블 부분을 바꿔야합니다. ec 테이블에 데이터가 있는지 여부에 관계없이 한 달에 정확히 한 행을 원합니다.

자신의 스키마에서 실제 테이블로 이동하지 않고 일부 데이터를 합성 할 수 있습니다. 예를 들어

:

SELECT 
    extract(month from add_months(sysdate,level-1)) Row_Month, 
    extract(year from add_months(sysdate,level-1)) Row_Year, 
    to_char(add_months(sysdate,level-1),'YYYY/MM') Formatted_Date, 
    trunc(add_months(sysdate,level-1),'mon') Join_Date 
FROM dual 
CONNECT BY level <= 12; 

을 제공합니다

ROW_MONTH,ROW_YEAR,FORMATTED_DATE,JOIN_DATE 
6,2016,'2016/06',1/06/2016 
7,2016,'2016/07',1/07/2016 
8,2016,'2016/08',1/08/2016 
9,2016,'2016/09',1/09/2016 
10,2016,'2016/10',1/10/2016 
11,2016,'2016/11',1/11/2016 
12,2016,'2016/12',1/12/2016 
1,2017,'2017/01',1/01/2017 
2,2017,'2017/02',1/02/2017 
3,2017,'2017/03',1/03/2017 
4,2017,'2017/04',1/04/2017 
5,2017,'2017/05',1/05/2017 

옵션 1 : 조회에 인라인 그 부속 쓰기를 할 수있는 시작 월과 마지막 줄에 그림 12 SYSDATE를 교체 시리즈에서 원하는 달 수에 맞게 변경됩니다.

옵션 2 (다양한 상황과 쿼리에서보다 편리하게 재사용 할 수 있음) 위의 SQL을 사용하여 긴 일련의보기 (예 : 1970 년 1 월부터 2199 년 12 월까지)를 작성하십시오. 그런 다음 원하는 시작 및 끝 월을 사용하여 join_date에서 해당보기에 조인 할 수 있습니다. 한 달에 한 행을 줄 것이고 그 열에서 형식화 된 날짜를 선택할 수 있습니다.

관련 문제