SQL*Plus, 데이터 연결 방법 – Union, Group by

SQL*Plus, 데이터 연결 방법 – Union, Group by

품명 항목 전월 합계
APERTUR 검사 생략 생략
합격 생략 생략
율(%) 생략 생략
G3 BOOT 검사 생략 생략
합격 생략 생략
율(%) 생략 생략
G5 CAP 검사 생략 생략
합격 생략 생략
율(%) 생략 생략
HDD CON 검사 생략 생략
합격 생략 생략
율(%) 생략 생략
SELECT 
	품목
	, Decode(NO,1,'검사',2,'합격','율(%)')
	, Sum(decode(주,0,cnt))
	, Decode(no,3, round(sum(분자)*100/sum(분모),3)
	, sum(분자)+sum(분모))
	, Sum(decode(주,1,건수))
	, Sum(decode(주,2,건수))
	, Sum(decode(주,3,건수))
	, Sum(decode(주,4,건수))
	, Sum(decode(주,5,건수))
	, Sum(decode(주,6,건수))
FROM 
( 
	SELECT 
		품목
		, NO
		, 주
		, Decode(NO, 3, round(sum(합격수)*100/sum(검사수),3)
		, sum(합격수) + sum(검사수)) 건수
		, Sum(decode(주, 0,null, 검사수)) 분모
		, Sum(decode(주, 0,null, 합격수)) 분자
	FROM
	(
		SELECT 
			품목
			, Decode(to_char(검사일,'yyyymm'), '199712', '0', ceil((to_char(검사일,'dd')+to_char(trunc(검사일,'mm'),'d')-1)/7)) 주
			, Count(*) 검사수
			, 0 합격수
			, 1 SW
		FROM 품질검사
		WHERE 공정 = 'PRESS'
		and 검사일 between '01-DEC-97' and '31-JAN-98'
		GROUP BY 품목,Decode(to_char(검사일,'yyyymm'), '199712', '0', ceil((to_char(검사일,'dd')+to_char(trunc(검사일,'mm'),'d')-1)/7))

		UNION ALL

		SELECT 
			품목
			, Decode(to_char(검사일,'yyyymm'), '199712', '0', ceil((to_char(검사일,'dd')+to_char(trunc(검사일,'mm'),'d')-1)/7)) 주
			, 0 검사수
			, Count(합격항목수)  합격수
			, 2 SW
		FROM
		( 
			SELECT 
				품목
				, 검사일
				, Count(*) 검사항목수
				, Sum(decode(LEAST(grade,'C'),'C',1)) 합격항목수
			FROM 검사결과
			WHERE 공정 = 'PRESS'
			and 검사일 between '01-DEC-97' and '31-JAN-98'
			GROUP BY 품목, 공정, 검사일, 일련번호 
		)
		WHERE (검사항목수 = 합격항목수) or (합격항목수 is null and rownum = 1)
		GROUP  BY 품목, Decode(to_char(검사일,'yyyymm'), '199712', '0', ceil((to_char(검사일,'dd')+to_char(trunc(검사일,'mm'),'d')-1) / 7))
	) x,  COPY_T  y
	WHERE NO in (SW, 3) and  NO <= 3
	GROUP BY 품목, NO, 주 
)
GROUP BY 품목, NO;

원문 출처
Encore – 대용량 데이터베이스

Leave a Reply