最大/最小スコアが 90 ~ 22、100 ~ 55、85 ~ 41、93 ~ 30、40 ~ 18 の場合、これらを 80 と 60 のしきい値でそれぞれ 3 つのバンドに分割する必要があります。私 (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
最終的には、このデータはより動的になり、実際の値を引き出しますが、今のところ、出力ロジックを正しく取得して、グラフ コンポーネントにプラグインし、次のようなグラフを生成できるようにしています。