나는 쿼리 작업을하고 있었고 oracle sql 개발자를 사용하여 실제로 어떻게해야 할 지 잘 모르는 도움이되는보기를 만들었다.Oracle SQL Query보기에서 실제로 느리지 만 실제 테이블에서는 느리지 않습니까?
데이터베이스의 열이 필요하지 않으며 일부 경우 행이 NULL이거나 잘못된 메모가 기록되어 있기 때문에 기본적으로보기를 만들었습니다. 이 행에는 'Reebok에 대한 조정'과 같은 메모가 포함 된 '텍스트'열이 포함됩니다. 제대로 쿼리를 실행하려면 각 행을 'CUSTOMER_NO'값에 매핑 할 수 있어야했습니다.
여기.
SELECT t.*,
CASE
WHEN LENGTH(CUSTOMER_NO) != '6' and text like '%Nike%' or CUSTOMER_NO IS NULL and text like '%Nike%' THEN 'NIK001'
WHEN LENGTH(CUSTOMER_NO) != '6' and text like '%Nike%' or CUSTOMER_NO IS NULL and text like '%Reebok%' THEN 'REB001'
ELSE CUSTOMER_NO
END as CUSTOMER_NO_ADJUSTED
FROM
gen_led_voucher_row_tab t
그래서이 뷰가 기본적으로 새 열이 'CUSTOMER_NO_ADJUSTED'지금 채워 100 % 인 열이 추가 된보기입니다 내가가 예상대로 좋은 작품.
그러나이 뷰에서 원래 쿼리를 실행하면 계속 실행되고 끝나고/행을 가져 오지 않습니다. 10 분 동안 아무 것도하지 못하게했습니다. 테이블 자체에서 비슷한 쿼리를 실행하면 30 초 이내에 데이터를 얻을 수 있습니다.
다음은 실행하려는 쿼리입니다. 기본적으로 부서 이름에 CODE_D 값을 그룹화하고 'EXISTS'옵션을 사용하여 쿼리를 한 번 실행하면 누가 기존 고객인지 (XXX 개월 만에 비즈니스를 수행 한 적이 있는지) 'NOT EXISTS'로 다시 실행합니다. 이론적으로 새로운 비즈니스 만의 부서 가치를 창출 할 것입니다 (지정된 달에 우리와 거래하지 않은 고객).
SELECT
/* CASE statement to rename CODE_D product lines to what the product is. List was provided by accounting in June of 2014 */
CASE
WHEN CODE_D = '11' or CODE_D = '12' or CODE_D = '18' or CODE_D IS NULL THEN 'Laces'
WHEN CODE_D = '15' or CODE_D = '16' or CODE_D = '40' or CODE_D = '45' or CODE_D = '50'
or CODE_D = '55' or CODE_D = '60' or CODE_D = '65' or CODE_D = '67' or CODE_D = '30'
or CODE_D = '35' THEN 'Custom Soles'
WHEN CODE_D = '17' THEN 'Custom Heels'
WHEN CODE_D = '19' or CODE_D = '39' or CODE_D = '49' or CODE_D = '59' or CODE_D = '69'
THEN 'Socks'
WHEN CODE_D = '14' THEN 'Sneakers'
WHEN CODE_D = '89' THEN 'Dress Shoes'
WHEN CODE_D = '99' THEN 'Other'
ELSE 'UNKNOWN'
END as DEPARTMENT,
sum(coalesce(credit_amount, 0) - coalesce(debet_amount,0)) as TOTAL
FROM
KPIC_MIKE_METRIC1 a
where ACCOUNTING_YEAR like '2014'
and ACCOUNT not like '4010'
and ACCOUNT like '4%'
and Exists
(
Select *
From KPIC_MIKE_METRIC1 b
where voucher_date >= '01-FEB-13'
and voucher_date < '01-FEB-14'
and ACCOUNT not like '4010'
and ACCOUNT like '4%'
and (credit_amount > '1' or debet_amount > '1')
and a.CUSTOMER_NO_ADJUSTED = b.CUSTOMER_NO_ADJUSTED
)
GROUP BY
/*
This GROUP BY statement needs to contain an entire copy of the CASE statement, minus the alias.
If changes are made to the CASE statement please update this GROUP BY statement
*/
CASE
WHEN CODE_D = '11' or CODE_D = '12' or CODE_D = '18' or CODE_D IS NULL THEN 'Laces'
WHEN CODE_D = '15' or CODE_D = '16' or CODE_D = '40' or CODE_D = '45' or CODE_D = '50'
or CODE_D = '55' or CODE_D = '60' or CODE_D = '65' or CODE_D = '67' or CODE_D = '30'
or CODE_D = '35' THEN 'Custom Soles'
WHEN CODE_D = '17' THEN 'Custom Heels'
WHEN CODE_D = '19' or CODE_D = '39' or CODE_D = '49' or CODE_D = '59' or CODE_D = '69'
THEN 'Socks'
WHEN CODE_D = '14' THEN 'Sneakers'
WHEN CODE_D = '89' THEN 'Dress Shoes'
WHEN CODE_D = '99' THEN 'Other'
ELSE 'UNKNOWN'
END
ORDER BY TOTAL DESC
어떤 도움을 주시면 감사하겠습니다. 나는 초보자이며 여기에서 제대로 실행하는 방법에 대한 조언을 얻을 수있을 것이라고 확신합니다. 어떤 도움을 주셔서 감사합니다!
실행 계획은 무엇을 말하는가를 DEPT_CODES? –