我有一个表存储某些数据组合的百分比值,如下所示
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,则应分配低;如果百分比介于20和40之间,则分配为中;如果介于40和60之间,则分配为On Track ,如果大于60,则为高。
是否可以在SQL查询中实现它。我尝试使用大小写,但我无法实现范围值。
答案 0 :(得分:0)
首先,回答你的实际问题:这将把两个表连接在一起,但最后的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