Как найти значение между диапазонами в SQL Server - PullRequest
0 голосов
/ 11 сентября 2009

Мое состояние

Мой запрос возвращает это

2             10          150000   where 2=startingslab and 10 = endingslab

11            20          250000

21            31          150000

Теперь я хочу получить информацию о цене для startingslab = 3. то есть 15000. Я знаю, что мне нужно обрабатывать его строка за строкой, так как между ними не работает.

Есть ли способ, кроме курсоров и цикла while, для этого.

EDIT

Этот запрос возвращает вышеуказанный набор результатов

SELECT  dbo.TBM_Slab_Details.SlabStartValue, 
        dbo.TBM_Slab_Details.SlabEndValue,
        convert(int,(@MRP-(dbo.TBM_Slab_Details.Discount*@MRP)/100)) as SlabPrice    
FROM    dbo.TBM_SLAB 
        INNER JOIN dbo.TBM_Slab_Details ON dbo.TBM_SLAB.SlabId = dbo.TBM_Slab_Details.SlabId and  productid=@productID 

теперь у меня есть переменная @slabvalue, которая содержит slabvalue.

теперь, например, для @ slabvalue = 3, я хочу 150000 из набора результатов выше

если это 12, я хочу 250000

Ответы [ 3 ]

1 голос
/ 11 сентября 2009
SELECT  convert(int,(@MRP-(d.Discount*@MRP)/100)) as SlabPrice    
FROM    dbo.TBM_SLAB s
        INNER JOIN dbo.TBM_Slab_Details d ON s.SlabId = d.SlabId and productid=@productID
WHERE   @slabValue >= d.SlabStartValue
        and @slabValue <= d.SlabEndValue
0 голосов
/ 11 сентября 2009

Если ваши значения SLABStartvalue и SlabEnd являются целочисленными (или другими числовыми) типами данных, возможно, это будет работать?

declare @Myvariable int
Set @Myvariable = 3

select @Myvariable, slabprice from 
(SELECT  dbo.TBM_Slab_Details.SlabStartValue,         
    dbo.TBM_Slab_Details.SlabEndValue,        
    convert(int,(@MRP-(dbo.TBM_Slab_Details.Discount*@MRP)/100)) as SlabPrice    
FROM    dbo.TBM_SLAB         
INNER JOIN dbo.TBM_Slab_Details 
    ON dbo.TBM_SLAB.SlabId = dbo.TBM_Slab_Details.SlabId and  productid=@productID) a
    where SlabStartValue <= @Myvariable and SlabEndValue>=@Myvariable

Если они относятся к типу символов, вам может потребоваться преобразовать их в целые числа в предложении where, чтобы они работали.

0 голосов
/ 11 сентября 2009

быстрый слепой выстрел:

declare @lab int
select top 1 *
from yourTable
where startingslab >= @lab
order by startingslab asc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...