我有一个表,该表的列名为“ Points”,此列的最小值为0,最大值为100.000。我必须对本专栏的每个范围进行分析,因此我编写了这样的查询:
select case when Points between 0 and 5000 then '0 - 5000'
when Points between 5001 and 20000 then '50001 - 20000'
when Points > 20000 then '> 20000'
else 0 end RangeP
from Sales
问题是客户希望查看从0到100.000的每2.000点
如果我使用案例编写查询,查询将变得非常大,因此我想一种动态获取此范围的方法。
有可能吗?非常感谢
答案 0 :(得分:0)
您可以创建一个包含范围及其文本标签的表,然后将其加入,例如
SELECT
s.Points,
COALESCE(r.label, 'range not found') AS range
FROM Sales s
LEFT JOIN
(
SELECT 0 AS start, 2000 AS end, '0 - 2000' AS label UNION ALL
SELECT 2001, 4000, '2001 - 4000' UNION ALL
...
SELECT 98000, 100000, '98000 - 100000'
) r
ON s.Points BETWEEN r.start AND r.end;
我已经内联了范围表,但是您可以创建一个正式表(或临时表),然后将上面的子查询替换为对该表的引用。