鉴于最大/最小分数为 90-22、100-55、85-41、93-30、40-18,我需要将它们分成 3 个波段,每个波段的阈值分别为 80 和 60。所以对于第一对会给出我 (90-80, 80-60, 60-22),最后一对会给出 (null-80, null-60, 40-18)。
我已经部分使用下面的 SQL,我遇到的问题是边缘情况,例如对于最后一对(40-18),UpperRed 值被返回为 60。我知道我有问题,如果最大/最小分数不低于 80(例如 93-85,因为这也会返回我不想要的琥珀色范围)。
DECLARE @GreenLower INT
DECLARE @AmberUpper INT
DECLARE @AmberLower INT
DECLARE @RedUpper INT
SET @GreenLower = 80
SET @AmberUpper = 80
SET @AmberLower = 60
SET @RedUpper = 60
DECLARE @Scores TABLE
(
GroupedBy VARCHAR(50) ,
PCTMax INT ,
PCTAvg INT ,
PCTMin INT ,
ALLAvg INT ,
AllMax INT ,
AllMin INT
)
INSERT INTO @Scores
VALUES ( 'Prov1', 80, 75, 63, 50, 90, 22 )
INSERT INTO @Scores
VALUES ( 'Prov2', 100, 96, 70, 80, 100, 55 )
INSERT INTO @Scores
VALUES ( 'Prov3', 72, 58, 44, 62, 85, 41 )
INSERT INTO @Scores
VALUES ( 'Prov4', 90, 78, 58, 59, 93, 30 )
INSERT INTO @Scores
VALUES ( 'Prov5', 63, 25, 21, 30, 40, 18 )
SELECT GroupedBy ,
PCTMax ,
PCTAvg ,
PCTMin ,
AllAvg ,
CASE WHEN AllMax > 79 THEN AllMax ELSE NULL END AS GreenUpper ,
CASE WHEN AllMin > 79 THEN AllMin ELSE @GreenLower END AS GreenLower ,
CASE WHEN AllMax < 79 THEN AllMax ELSE
CASE WHEN AllMax > 79 THEN @AmberUpper ELSE NULL END
END AS AmberUpper ,
@AmberLower AS AmberLower ,
CASE WHEN AllMin > 59 THEN NULL ELSE @RedUpper END AS RedUpper ,
CASE WHEN AllMin > 59 THEN NULL ELSE AllMin END AS RedLower
FROM @Scores
最终,这些数据将更加动态并提取真实值,但现在我只是试图让输出逻辑正确,因此我可以将其插入图形组件并生成如下所示的图形: