Рейтинг, основанный на том, какой столбец соответствует строке - PullRequest
0 голосов
/ 01 октября 2009

Я пытаюсь написать запрос, который оценивает, насколько хорошо конкретный объект соответствует некоторым критериям поиска.

У меня есть таблица со столбцами: objectid, typeid и name. С объектом может быть связано два имени (текущее имя или предыдущее имя). Идентификатор типа идентифицирует тип имени строки.

Пользователь может искать базу данных из формы. Форма представляет две строки. Я хочу выполнить поиск в базе данных и в строках, которые соответствуют string1 и имеют тип "текущее имя", получив оценку 1. Строки, соответствующие строке2 и типу «предыдущее имя», также получают рейтинг 1. Строки, которые соответствуют строке1, но относятся к типу «предыдущее имя», все еще выбраны, но им присвоен рейтинг 0. Строки, которые соответствуют строке2, но относятся к типу «текущее имя», по-прежнему также выбираются, но им присваивается рейтинг 0.

В настоящее время я ищу строку1 и строку2, где типом является «предыдущее имя» или «текущее имя», и группирую результаты по objectid, а рейтинг основывается на количестве каждой группы. Но это недостаточно гибко, чтобы давать разные оценки в зависимости от того, в каком столбце была найдена строка.

У меня есть другие критерии, которые влияют на рейтинг. У меня просто проблемы с попыткой изначально заполнить временную таблицу.

1 Ответ

1 голос
/ 01 октября 2009

Если вы ищете какие-то общие показатели, дайте мне знать, но вот как я интерпретировал ваш вопрос:

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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...