首页 > 解决方案 > 实现基于值范围的颜色查找 SQL 表

问题描述

我想实现一个存储下限、上限和颜色的 SQL 表。然后为特定颜色定义不同的范围。

目的是查找一个值是否在某个范围内,然后决定颜色。

如何在没有任何价值范围差距的情况下实现这一点?

标签: sqltsql

解决方案


关于要求和您的实现的细节并不多,但我想您可以使用以下想法:

表定义:

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)

推荐阅读