我們系統中的用戶可以通過執行某些“活動”來賺取積分。積分的數量可能因國家、業務范圍和角色而異。我無法從積分表中獲取單個值。
ID ActivityFK CountryFK BusinessTypeFK RoleFK Points
1 1 NULL 1 NULL 100
2 1 13 1 NULL 50
3 1 13 1 4 75
4 1 13 NULL NULL 25
5 1 NULL NULL 5 15
這個想法是我想通過使用最嚴格的匹配來獲得該人獲得的分數。(他們滿足的標準越多,匹配的重要性就越高)
具有預期結果的示例:
User A:
Country:13
Business:2
Role:4
Points:25
用戶 A 只匹配 ID = 4 的行。25 分
User B:
Country:13
Business: 1
Role: 2
Points: 50
用戶 B 匹配 3 行(ID = 1、2 和 4)。第 2 行匹配最多,因此 50 分
User C:
Country: 13
Business: 1
Role: 4
Points: 75
用戶 C 匹配 4 行(ID = 1、2、3 和 4)。第 3 行匹配最多,因此 75 分
User D:
Country: 5
Business: 1
Role: 5
Points: 100
用戶 D 平均匹配 2 行(ID = 1,5),因此使用它們之間可用的最大點值
是否有一個查詢可以區分這些“匹配”級別,以便我可以拉出一行并為該用戶獲取正確的點數?
任何幫助表示贊賞!
uj5u.com熱心網友回復:
如果將 NULL 添加到任何內容,則結果為 NULL,因此這似乎可以按預期作業。如果有人看到提高效率的機會,請告訴我。我從中借用:SQL - 選擇具有最匹配列的行
DECLARE @a int, @c int, @b int, @r int
SET @a = 1
SET @c = 13
SET @b = 2
SET @r = 4
SELECT TOP 1 Points FROM (
SELECT
Points,
CASE WHEN CountryFK = @c THEN 1 WHEN CountryFK IS NULL THEN 0 ELSE NULL END
CASE WHEN BusinessFK = @b THEN 1 WHEN BusinessFK IS NULL THEN 0 ELSE NULL END
CASE WHEN RoleFK = @r THEN 1 WHEN RoleFK IS NULL THEN 0 ELSE NULL END AS Weights
FROM @ActConfig WHERE ActivityFK = @a
) as j
WHERE Weights IS NOT NULL
ORDER BY Weights DESC, Points DESC
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/514591.html
標籤:sql服务器tsql
下一篇:通過多個書擋拆分問題和答案文本
