在SQL查询中实现范围条件



我有一个表,其中存储了一些数据组合的百分比值,如下所示

Area_ID Period_ID Business_ID Percentage 
 1         1           1         50 
 1         1           2         40

我有另一个表存储阈值范围,如

Threshold_ID  Percentage    Description
  1                20           Low
  2                40           Medium
  3                60           On Track

现在我必须找出上述组合落在哪个阈值。如果百分比小于20,它应该分配Low;如果百分比在20到40之间,它应该分配Medium;如果百分比在40到60之间,它应该分配On Track;如果百分比大于60,它应该分配High。

是否可以在SQL查询中实现。我尝试使用case,但我无法在case中实现范围值。

首先,回答您的实际问题:这将把两个表连接在一起,但是最后的WHERE子句将过滤掉您看到的额外行。不知道实际的表名是什么,所以请用任何必要的名称替换它们。

SELECT *
FROM 
    Perc p
     LEFT JOIN 
    Thresh t ON 
        p.Percentage <= t.Percentage    -- return all ranges that are greater than the current value
WHERE NOT EXISTS
  (
    SELECT 1 
    FROM Thresh x 
    WHERE   -- eliminate ranges that are higher than this range and greater than the current value
        t.Percentage > x.Percentage AND         
        p.Percentage <= x.Percentage            
  )

性能可能不是很好,因为额外的WHERE NOT EXISTS会减慢您的速度。一个更好的模型是在SQL Server上编写的,因为我没有db2实例:

CREATE TABLE #Threshold
  (
    Threshold_ID INT IDENTITY(1,1),
    PercentageStart INT,
    PercentageEnd INT,
    Description VARCHAR(20)
  )
INSERT INTO #Threshold 
  (
    PercentageStart,
    PercentageEnd,
    Description
  )
SELECT 0, 20, 'Low'
UNION 
SELECT 21, 40, 'Medium'
UNION
SELECT 41, 60, 'On Track'
UNION
SELECT 61, 100, 'High'

CREATE TABLE #Percentage (Percentage INT)
INSERT INTO #Percentage 
SELECT 40
UNION
SELECT 50

SELECT *
FROM 
    #Percentage p 
     INNER JOIN 
    #Threshold t ON 
        p.Percentage BETWEEN t.PercentageStart AND t.PercentageEnd

DROP TABLE #Percentage
DROP TABLE #Threshold

最新更新