Не мисля, че диапазоните ви са съвсем подходящи за заявката, която сте написали, въпреки че формулировката на заданието е двусмислена, тъй като „между“ включва - така че както е формулиран въпросът, кредитен рейтинг от точно 600 ще се появи и в двете „долните“ и „средните“ скоби. Вашата версия ще постави 600 в "долната" група, но е спорно коя трябва да бъде; Мисля, че трябва да е „средно“ от другите определения, но не е ясно. Във въпроса няма скоби за резултати под 500, но ако имате някои от тях, тогава текущият ви код ще ги включи в групата „средни“, тъй като те са под 700, но не между 500 и 600.
Така че бих интерпретирал това като:
SELECT * FROM (
SELECT case
when CREDITSCORE >= 500 and CREDITSCORE < 600 then 'LOWER RANGE(500-600)'
when CREDITSCORE >= 600 and CREDITSCORE < 700 then 'AVERAGE RANGE(600-700)'
when CREDITSCORE >= 700 then 'PREMIUM RANGE(700+)'
end as CREDITSCORE_RANGE,
state
FROM customer
)
PIVOT (
count(state) FOR state IN ('PA' as pa, 'CA' as ca, 'NY' as ny, 'MD' as md)
);
Заглавието на въпроса ви се отнася до РОБЪЛ и за да получите общия ред, можете да използвате тази функция:
SELECT creditscore_range, sum(pa) AS pa, sum(ca) AS ca, sum(ny) AS ny, sum(md) AS md
FROM (
SELECT * FROM (
SELECT CASE
WHEN creditscore >= 500 AND creditscore < 600 THEN 'LOWER RANGE(500-600)'
WHEN creditscore >= 600 AND creditscore < 700 THEN 'AVERAGE RANGE(600-700)'
WHEN creditscore >= 700 THEN 'PREMIUM RANGE(700+)'
END AS creditscore_range,
state
FROM customer
)
PIVOT (
COUNT(state) FOR state IN ('PA' AS pa, 'CA' AS ca, 'NY' AS ny, 'MD' AS md)
)
)
GROUP BY ROLLUP (creditscore_range);
Ако имате резултати под 500, тогава и двете ще включват ред за тези с creditscore_range
като нула; което е объркващо с ROLLUP
версия. Може да искате да филтрирате всички резултати под 500 от най-вътрешната заявка, но отново не е ясно дали това е необходимо или желателно.
Не съм сигурен обаче, че задачата търси, когато говори за класиране. Това предполага промяна на реда на колоните въз основа на стойностите, които съдържат. Класирането по състояние би имало по-голям смисъл, ако данните бяха обърнати в друга посока.