Я хотел бы составить линейную формулу оценки, которую я могу использовать в представлении.Однако у меня возникают проблемы при разработке логики.
Данные:
*UserID (int)| *WidgetID (int)| Rank (int) | IsPreferred (bit)
1 | 1 | 1 | 1
1 | 2 | 2 | 1
1 | 3 | 3 | 1
1 | 4 | 1 | 0
1 | 5 | 2 | 0
2 | 1 | 1 | 1
Пользователь № 1 больше всего любит виджет № 1 и больше всего ненавидит виджет № 4.Пользователь № 2 просто любит виджет № 1 (больше всего).
Мне бы хотелось, чтобы мой взгляд выглядел примерно так:
*UserID (int)| *WidgetID (int)| Rank (int) | IsPreferred (bit) | Score (int)
1 | 1 | 1 | 1 | 3
1 | 2 | 2 | 1 | 2
1 | 3 | 3 | 1 | 1
1 | 4 | 1 | 0 | -2
1 | 5 | 2 | 0 | -1
2 | 1 | 1 | 1 | 1
Ранг всегда (на данный момент) имеет абсолютное значениемежду 1-5 (включительно).UserID и WidgetID являются первичными ключами, и приложение устанавливает последовательные уникальные ранги, поэтому мне не нужно беспокоиться о противоречивых результатах.Я думал о том, чтобы сделать что-то вроде этого:
Select *, Case When IsPreferred = 1 Then (5 / Rank) Else -(5 / Rank) End As Score...
Но это экспоненциально и может вызвать проблемы, если мы допустим более 5 рейтингов в будущем ...
Я надеюсь, что я нене нужно делать это в моем приложении, потому что это не очень l33t
.Я думаю, что PARTITION
или RANK
могут помочь мне, но я пока не добился успеха.
У кого-нибудь есть идеи?Спасибо
ОБНОВЛЕНИЕ см. Мой ответ ниже