In SQL (SSMS), I am trying to do a lookup using a ranging table (similar to Point_Lookup below) and what I need is to bypass the NULL scenario.
Firstly, please use below SQL codes to replicate the scenario in question:
-- Code for People Data --
Create table #People ([Name] varchar(50) null,Age int null)
Insert into #People VALUES
('George' , 30),
('Clooney' , 18),
('Sandra' , 44),
('Bullock' , 15),
('Adam' , 100)
-- Code for Point_Lookup Data--
Create table #Point_Lookup ([Lower_Limit] int null, [Upper_Limit] int null, [Point] int null)
Insert into #Point_Lookup VALUES
(0, 10, 1),
(10, 20, 2),
(20, 30, 3),
(30, 40, 4),
(40, 50, 5),
(50, NULL, 6)
I have tried below code to successfully join both tables and get the desired points EXCEPT when [Age] >= 50 (Since the Upper_Limit is showing NULL, the point from the lookup table is also showing NULL - desired result should be 6).
Select ppl.*, point.[Point]
from #People as ppl
left join #Point_Lookup as point
on ppl.[Age] >= point.[Lower_Limit] and
ppl.[Age] < point.[Upper_Limit]
I have also tried replacing the NULL using ISNULL() but I realized this still does not JOIN both tables when [Age] >= 50 (not quite sure why).
Select ppl.*, point.[Point]
from #People as ppl
left join #Point_Lookup as point
on ppl.[Age] >= point.[Lower_Limit]
and ppl.[Age] < isnull(point.[Upper_Limit], point.[Upper_Limit] + 1 + ppl.
[Age])
Is there a way to somehow only consider one condition --> (ppl.[Age] >= point.[Lower_Limit]) when [Age] >= 50 (without going into the NULL in Upper_Limit)? Maybe somehow using CASE?
The expected result should show 6 Point when [Age] >= 50. Please help.