sql - 实现基于值范围的颜色查找 SQL 表
问题描述
我想实现一个存储下限、上限和颜色的 SQL 表。然后为特定颜色定义不同的范围。
目的是查找一个值是否在某个范围内,然后决定颜色。
如何在没有任何价值范围差距的情况下实现这一点?
解决方案
关于要求和您的实现的细节并不多,但我想您可以使用以下想法:
表定义:
CREATE TABLE [dbo].[ColorRanges](
[Id] [int] IDENTITY(1,1) NOT NULL,
[RangeFrom] [int] NULL,
[RangeTo] [int] NULL,
[Color] [nvarchar](50) NOT NULL,
CONSTRAINT [PK_ColorRanges] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
样本数据:
INSERT INTO [ColorRanges] (RangeFrom, RangeTo, Color)
VALUES (NULL, 0, 'Green'),
(0, 100, 'Yellow'),
(100, 200, 'Orange'),
(200, NULL, 'Red')
假设可能存在无限范围-范围值NULL
。
第二个假设是可能存在重叠范围 - 如果您的要求不同,您可以轻松调整它。
然后为指定值选择颜色是:
DECLARE @Value int
SET @Value = 100
SELECT Color
FROM ColorRanges
WHERE (RangeFrom IS NULL AND RangeTo IS NULL) OR -- that scenario might be not valid
(RangeFrom IS NULL AND @Value <= RangeTo) OR
(@Value BETWEEN RangeFrom AND RangeTo) OR
(@Value >= RangeFrom AND RangeTo IS NULL)
推荐阅读
- c - 为什么 Valgrind 在分配大小为 8 的块后报告地址 0x522da08 为 0 字节?
- graphql - 使用 Apollo Federated GraphQL,有没有办法对来自外部实体的值进行排序/分页?
- linux - 从 Linux 调度程序收集负载权重数据
- python - 如何在破折号前打印一个单词?
- python - SVC python 输出对于使用的每个 C 或 gamma 显示相同的值“1”
- apache-kafka - 如何即时/启动时创建 Kafka 主题以供生产者发送?
- javascript - p5.js 椭圆和矩形行为
- r - 将 HH:MM:SS 列转换为 ZT 时间
- python - 尝试创建一个可以在数组中找到最接近数字的函数
- bash - 如果没有返回则执行操作