我正在編寫一份SSRS報告,起初我以爲我會在報告級別實施這些商業規則,但發現它不如任務。所以現在我可以在SSRS或TSQL級別實現自定義代碼(vb.net),這將是我的偏好。TSQL兩個表之間的業務規則實現
因此,我已經滿意的大部分業務規則。這是我倒下的最後一步。爲了簡單起見,我提供了一個示例表,表示我需要處理的數據。
DECLARE @TeamTable TABLE
(
TeamID VARCHAR(3),
AssignedTask INT
)
INSERT INTO @TeamTable VALUES ('AAA', 12)
INSERT INTO @TeamTable VALUES ('BBB', 45)
INSERT INTO @TeamTable VALUES ('CCC', 67)
INSERT INTO @TeamTable VALUES ('DDD', 11)
INSERT INTO @TeamTable VALUES ('EEE', 12)
INSERT INTO @TeamTable VALUES ('FFF', 10)
INSERT INTO @TeamTable VALUES ('GGG', 11)
INSERT INTO @TeamTable VALUES ('HHH', 6)
INSERT INTO @TeamTable VALUES ('III', 3)
INSERT INTO @TeamTable VALUES ('JJJ', 11)
INSERT INTO @TeamTable VALUES ('KKK', 0)
INSERT INTO @TeamTable VALUES ('LLL', 4)
INSERT INTO @TeamTable VALUES ('MMM', 12)
INSERT INTO @TeamTable VALUES ('NNN', 1)
INSERT INTO @TeamTable VALUES ('OOO', 0)
INSERT INTO @TeamTable VALUES ('PPP', 12)
INSERT INTO @TeamTable VALUES ('QQQ', 12)
INSERT INTO @TeamTable VALUES ('RRR', 0)
此查詢中獲取的數據中準確地表示我的數據集的方式:
SELECT TT.TeamID, TT.AssignedTask, RANK() OVER
(ORDER BY TT.AssignedTask DESC) AS 'Rank'
FROM @TeamTable TT
WHERE AssignedTask > 0
現在這裏的伎倆。我必須根據擁有1個或更多任務的團隊數量爲每個團隊分配一個加權值,我不知道下一步該做什麼。所以在我的樣本數據,你會看到那支隊伍KKK,OOO,存款準備金率具有零,因此15是我們的首要點值,我得到的是使用:
DECLARE @RankMax TINYINT
SET @RankMax = @@ROWCOUNT
SELECT @RankMax
所以組隊CCC得到15分,因爲他們都是頂級的狗,它縮小.....扭曲。 BBB獲得14.
AAA,EEE,MMM,PPP,QQQ全部並列。因此,下一組積分被添加,然後平均,每個人都得到平均分數。
所以5隊並列如此13,12,11,10,9加在一起等於55除以5意味着每隊得11分。
然後我們下移到JJJ,GGG,DDD另一個領帶。 8 + 7 + 6 = 21和21/3 = 7
其餘的歸零。所以最後記錄是這樣的:
TeamID | AssignTask | Rank |
CCC | 67 | 15
BBB | 45 | 14
AAA | 12 | 11
EEE | 12 | 11
MMM | 12 | 11
PPP | 12 | 11
QQQ | 12 | 11
JJJ | 11 | 7
GGG | 11 | 7
DDD | 11 | 7
FFF | 10 | 5
HHH | 6 | 4
LLL | 4 | 3
III | 3 | 2
NNN | 1 | 1
不找任何人做我的家庭作業只是一個如何來解決這個問題,將不勝感激或兩個指針。
謝謝
我以前沒見過SQL小提琴。這很酷。如果可以的話,我會再給你一點。此外,我不知道你可以在選擇條款中做這樣的分配操作,所以你今天真的教會了我幾個有價值的東西。謝謝!! – GPGVM
不客氣!對於這類問題,SQL小提琴是一個很好的資源。也就是說,您將DDL添加到您的問題的事實也非常感謝! –