У кого-нибудь есть идеи, почему, когда я пытаюсь выполнить этот запрос, он просто выполняется вечно и не останавливается ??
Запросы в предложениях «С» выполняются самостоятельно.Просто когда я пытаюсь присоединиться к ним, я не могу заставить его работать должным образом ??
--Process name and input
With ProcessIn as
(
select Data.Scan_time, equipment.equipment_desc, data.serial_number
from Data, equipment
where Data.equipment = equipment.equipm_barcode and data.quality_plan = 'N/A' and data.error_code = 'N/A'
)
--Total process defects
,ProcessDefect as
(
select Data.Scan_time, equipment.equipment_desc, data.serial_number
from Data, equipment
where Data.equipment = equipment.equipm_barcode and (data.quality_plan <> 'N/A' or data.error_code <> 'N/A')
)
Select concat(to_char(ProcessIn.SCAN_TIME, 'mm'), to_char(ProcessIn.SCAN_TIME, 'dd')) as "Date", ProcessIn.equipment_desc, count(ProcessIn.serial_number), count(ProcessDefect.serial_number)
from ProcessIn
Left Join ProcessDefect
On concat(to_char(ProcessIn.SCAN_TIME, 'mm'),to_char(ProcessIn.SCAN_TIME, 'dd')) = concat(to_char(ProcessDefect.SCAN_TIME, 'mm'),to_char(ProcessDefect.SCAN_TIME, 'dd'))
and ProcessIn.equipment_desc = ProcessDefect.equipment_desc
group by concat(to_char(ProcessIn.SCAN_TIME, 'mm'), to_char(ProcessIn.SCAN_TIME, 'dd')), ProcessIn.equipment_desc
;
ОБНОВЛЕНИЕ 20110816 Я использовал некоторые из предложений, чтобы уточнить мой запрос безуспешно.У кого-нибудь есть другие предложения?Кроме того, в любом случае, чтобы убедиться, что мой индекс используется должным образом, поскольку я новичок в их создании / использовании.Я просто использовал интерфейс Oracle для создания индекса на основе serial_number и smalldate.
Спасибо
With ProcessIn as
(
select data.smalldate, mip.mip_step_description, data.part_serial_number
from Data, MIP
where Data.equipment = MIP.equipment and data.quality_plan is null and data.error_code is null
)
,ProcessDefect as
(
select data.smalldate, mip.mip_step_description, data.part_serial_number
from Data, MIP
where Data.equipment = MIP.equipment and (data.quality_plan is not null or data.error_code is not null)
)
Select ProcessIn.smalldate, ProcessIn.mip_step_description, count(ProcessIn.part_serial_number), count(ProcessDefect.part_serial_number)
from ProcessIn
Left Join ProcessDefect
On ProcessIn.smalldate = ProcessDefect.smalldate
and ProcessIn.mip_step_description = ProcessDefect.mip_step_description
group by ProcessIn.smalldate, ProcessIn.mip_step_description
ОБНОВЛЕНИЕ 110820
Так что я добился определенного прогресса, но мне нужнопомогите понять одну последнюю вещь.Теперь я изменил структуру запросов так, чтобы она выглядела так:
select data.smalldate, mip.mip_step_description, error_code.error_code_en, count(case when (error_code is null and quality_plan is null) then data.part_serial_number end) as "Input", count(case when error_code is not null then data.part_serial_number end) as "Defects"
from Data
left join MIP
On data.equipment = mip.equipment
left join error_code
on data.error_code = error_code.error_code_sn
group by data.smalldate, mip.mip_step_description, error_code.error_code_en
order by data.smalldate, mip.mip_step_description, count(data.part_serial_number) desc
Как вы можете видеть в операторе select, я использую операторы case в своих функциях count.Это отлично работает.Вывод данных выглядит следующим образом:
Date MIP_Desc Error_Code Input Defects
1/1/2011 MIP Z (null) 100 0
1/1/2011 MIP Z A 0 10
1/1/2011 MIP Z B 0 15
Я бы хотел заполнить одно и то же входное значение во входном столбце во всех строках с одинаковой датой и MIP.
Вывод должен выглядеть следующим образом
Date MIP_Desc Error_Code Input Defects
1/1/2011 MIP Z (null) 100 0
1/1/2011 MIP Z A 100 10
1/1/2011 MIP Z B 100 15
Любые советы ??Еще раз спасибо за помощь