2009-09-11 5 views
0

Mon état estcomment trouver une valeur entre les plages dans le serveur SQL

Ma requête retourne cette

2    10   150000 where 2=startingslab and 10 = endingslab 

11   20   250000 

21   31   150000 

maintenant je veux obtenir les détails des prix pour startingslab = 3. i.e 15000.Je sais que je dois le traiter ligne par ligne entre ne fonctionne pas.

Existe-t-il d'autres moyens que les curseurs et la boucle while pour accomplir cela.

EDIT

Cette requête renvoie le jeu de résultats ci-dessus

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 [email protected] 

maintenant j'ai une @slabvalue variable qui détient slabvalue.

maintenant par exemple @ slabvalue = 3, je veux 150000 en haut resultset

si elle est 12, je veux 250000

+0

pourriez-vous développer votre question, je ne comprends pas –

+3

Souhaitez-vous fournir plus de détails sur la structure de votre table et la requête que vous exécutez? –

+0

On dirait que peut-être la première colonne est un champ contenant une plage, et il veut détecter la valeur de la plage d'une valeur donnée tombe dans? – MartW

Répondre

0

un tir aveugle rapide:

declare @lab int 
select top 1 * 
from yourTable 
where startingslab >= @lab 
order by startingslab asc 
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 [email protected] 
WHERE @slabValue >= d.SlabStartValue 
     and @slabValue <= d.SlabEndValue 
0

Si votre valeur SLABStartvalue et SlabEnd sont des types de données entiers (ou d'autres types numériques), peut-être que cela fonctionnerait? S'il s'agit d'un type de données de type caractère, vous devrez peut-être les convertir en ints dans la clause where pour le faire fonctionner.

Questions connexes