Как создать обычное ранжирование моего набора результатов в SQL? - PullRequest
0 голосов
/ 29 мая 2009

Скажем, у меня есть набор результатов, который может содержать одно или несколько значений, но я всегда хочу только одно значение в результате, и конкретные значения стоят больше, чем другие.

Как бы я решил это в SQL, чтобы я мог использовать его в подзапросе?

Пример (специфичный для T-SQL, с акцентом, с которым я работаю):

У меня есть таблица:

tChore(ChoreId int primary key, ChoreDescription nvarchar(15))

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

tDayChores(
    DayId int primary key,
    ChoreId int foreign key references tChore(ChoreId)
)

Который загружен днями и делами в отношениях «многие ко многим».

Конечно, есть третья таблица, содержащая названия всех дней недели.

Теперь, допустим, я хотел бы получить один и только один день на уборку. Я предпочитаю делать это по средам, но если это не запланировано, то я бы хотел сделать это по четвергам, и, в свою очередь, если это не запланировано, это не имеет значения, любой день - это хорошо.

Один из способов ограничить набор результатов одной строкой - сделать это:

select top(1)
    DayId
from
    tDayChores DC
    inner join tChore C
        on C.ChoreId = DC.ChoreId
where
    C.ChoreDescription = 'vacuum'

Однако, если вакуум запланирован на понедельник и среду, в результате я получу понедельник, и я бы хотел, чтобы среда была наивысшим.

1 Ответ

0 голосов
/ 29 мая 2009

Вот решение с использованием подзапроса:

select top(1)
    t.DayId
from (
        select
            DayId,
            case
                when DayId = 3 then 1 -- DayId: 3 = Wednesday
                when DayId = 4 then 2 -- DayId: 4 = Thursday
                else 3
            end DayRank
        from
            tDayChores DC
            inner join tChore C
                on C.ChoreId = DC.ChoreId
        where
            C.ChoreDescription = 'vacuum'
    ) t
order by t.DayRank

Ранжирование дня гарантирует, что среда и четверг будут отсортированы раньше любого другого дня, а затем вы просто выбираете верхний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...