Рейтинг, основанный на том, какой столбец соответствует строке

0

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

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

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

В настоящее время я ищу строку string1 и string2, где тип - это "предыдущее имя" или "текущее имя" и группировка результатов по объекту, и рейтинг основан на подсчете каждой группы. Но это недостаточно гибко, чтобы давать разные рейтинги в зависимости от того, в каком столбце найдена строка.

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

Теги:

1 ответ

1
Лучший ответ

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

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')
  • 0
    Обновлено с немного больше информации.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню