У меня есть SQL-запрос, выполняющий FULL JOIN для нескольких таблиц базы данных. Запрос является динамическим на основе пользовательского ввода, но для примера я просто включил некоторые возможные входные данные.
У меня возникла проблема: мне нужно отфильтровать по нескольким диапазонам дат и вернуть результаты запроса, если они попадают в какой-либо диапазон дат.
Запрос, который у меня сейчас есть:
SELECT rank=COUNT(*)
FROM [LOM].[dbo].[lom_problem] problem
FULL JOIN [LOM].[dbo].[lom_batch] batch on problem.lom_number = batch.lom_number
FULL JOIN [LOM].[dbo].[lom_specimen] specimen on problem.lom_number = specimen.lom_number
FULL JOIN [LOM].[dbo].[Main_LOM_Form] main on problem.lom_number = main.lom_number
WHERE problem.problem = '102' AND batch.batch IS NULL AND main.practice_code IN('HPMR', 'DOCTORs2')
AND main.occurrence_date >=Convert(datetime,'01/04/2012') AND main.occurrence_date <= Convert(datetime,'01/05/2012')
OR main.received_date>=Convert(datetime,'01/04/2012') AND main.received_date <= Convert(datetime,'01/05/2012')
Однако запрос возвращает результаты, как если бы мой запрос был СУММОЙ
SELECT rank=COUNT(*)
FROM [LOM].[dbo].[lom_problem] problem
FULL JOIN [LOM].[dbo].[lom_batch] batch on problem.lom_number = batch.lom_number
FULL JOIN [LOM].[dbo].[lom_specimen] specimen on problem.lom_number = specimen.lom_number
FULL JOIN [LOM].[dbo].[Main_LOM_Form] main on problem.lom_number = main.lom_number
WHERE problem.problem = '102' AND batch.batch IS NULL AND main.practice_code IN('HPMR', 'DOCTORs2')
AND main.occurrence_date >=Convert(datetime,'01/04/2012') AND main.occurrence_date <= Convert(datetime,'01/05/2012')
и
SELECT rank=COUNT(*)
FROM [LOM].[dbo].[lom_problem] problem
FULL JOIN [LOM].[dbo].[lom_batch] batch on problem.lom_number = batch.lom_number
FULL JOIN [LOM].[dbo].[lom_specimen] specimen on problem.lom_number = specimen.lom_number
FULL JOIN [LOM].[dbo].[Main_LOM_Form] main on problem.lom_number = main.lom_number
WHERE main.received_date>=Convert(datetime,'01/04/2012') AND main.received_date <= Convert(datetime,'01/05/2012')
Как получить запрос на возврат результатов с неповрежденной этой частью:
SELECT rank=COUNT(*)
FROM [LOM].[dbo].[lom_problem] problem
FULL JOIN [LOM].[dbo].[lom_batch] batch on problem.lom_number = batch.lom_number
FULL JOIN [LOM].[dbo].[lom_specimen] specimen on problem.lom_number = specimen.lom_number
FULL JOIN [LOM].[dbo].[Main_LOM_Form] main on problem.lom_number = main.lom_number
WHERE problem.problem = '102' AND batch.batch IS NULL AND main.practice_code IN('HPMR', 'DOCTORs2')
плюс фильтрация для любого диапазона дат поверх этого:
AND main.occurrence_date >=Convert(datetime,'01/04/2012') AND main.occurrence_date <= Convert(datetime,'01/05/2012')
OR main.received_date>=Convert(datetime,'01/04/2012') AND main.received_date <= Convert(datetime,'01/05/2012')
Спасибо!
Edit:
Мне нужно фильтровать на основе диапазона данных main.occurrence_date и main.received_date. Если диапазон данных присутствует в одном или другом столбце, мне нужно вернуть счетчик. Тем не менее, запрос, который у меня есть, теперь возвращает сумму первой части инструкции where, а затем результаты второй части (после ИЛИ). Я подумал, что это может быть просто проблема синтаксиса / форматирования, но не был уверен.