Я пытаюсь написать запрос, который оценивает, насколько хорошо определенный объект соответствует некоторым критериям поиска.
У меня есть таблица со столбцами: objectid, typeid и name. У объекта могут быть два связанных с ним имени (текущее имя или предыдущее имя). Типид идентифицирует, какой тип имени имеет строка.
Пользователь может искать базу данных из формы. Форма представляет две строки. Я хочу выполнить поиск в базе данных и строках, которые соответствуют строке string1 и являются типом "текущего имени", присваивается рейтинг 1. Строкам, которые соответствуют строке string2 и относятся к типу "предыдущего имени", также присваивается рейтинг 1. Строки, которые соответствуют строкам1, но относятся к типу "предыдущего имени", все еще выбраны, но им присваивается рейтинг 0. Строки, которые соответствуют строке 2, но являются типом "текущего имени", все еще выбираются, но им присваивается рейтинг 0.
В настоящее время я ищу строку string1 и string2, где тип - это "предыдущее имя" или "текущее имя" и группировка результатов по объекту, и рейтинг основан на подсчете каждой группы. Но это недостаточно гибко, чтобы давать разные рейтинги в зависимости от того, в каком столбце найдена строка.
У меня есть другие критерии, которые повлияют на рейтинг. У меня просто возникают проблемы с попыткой изначально заполнить таблицу temp.
Если вы ищете некоторые подсчеты совокупности, дайте мне знать, но именно так я интерпретировал ваш вопрос:
select *,
case
when MyColumn = 'string1' and MyType = 'current name' then 1
when MyColumn = 'string2' and MyType = 'previous name' then 1
when MyColumn = 'string1' and MyType = 'previous name' then 0
when MyColumn = 'string2' and MyType = 'current name' then 0
else 2 -- in case type is neither previous nor current
end as Rating
from MyTable
where MyColumn = 'string1'
or MyColumn = 'string2'
Или, например, если вам нужны только записи, соответствующие одному из двух типов:
select *,
case
when MyColumn = 'string1' and MyType = 'current name' then 1
when MyColumn = 'string2' and MyType = 'previous name' then 1
when MyColumn = 'string1' and MyType = 'previous name' then 0
when MyColumn = 'string2' and MyType = 'current name' then 0
end as Rating
from MyTable
where (MyColumn = 'string1' or MyColumn = 'string2')
and (MyType = 'current name' or MyType = 'previous name')