如何在sql server中找到范围之间的值

时间:2009-09-11 16:03:43

标签: sql sql-server sql-server-2005 tsql

我的条件是

我的查询正在返回此

2             10          150000   where 2=startingslab and 10 = endingslab

11            20          250000

21            31          150000

现在我想获得startingslab = 3的价格详情。即15000.I我知道我需要逐行处理它,因为它们之间没有工作。

除了游标和while循环之外,还有什么方法可以实现这一目标。

修改

此查询返回上述结果集

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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

快速盲目拍摄:

declare @lab int
select top 1 *
from yourTable
where startingslab >= @lab
order by startingslab asc

答案 2 :(得分:0)

如果您的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子句中的int以使其工作。