2015-02-11 115 views
0
DECLARE @Lines int, @Qty int, @Line2 int 
SELECT @Line1 = Line 
FROM dbo.PRODUCT 
WHERE ID='100' 
AND SubID = '011' 

print @Line1 

SELECT @Line2 = Line_num 
     ,@Qty = Qty_num 
FROM dbo.Equip 
WHERE Qty_num= 
CASE WHEN Line_num= @Line1 
     THEN Qty_num 
    WHEN Line_num < @Line1 
     THEN Qty_num - 1 
END 

打印@ Lines2 打印@QtySql Server中:如何在SQL Server相當於LOOKUP在Excel中查找

在dbo.Equip表:

Line_num  Qty_num 
20   3 
29   4 
39   5 

時的輸出中@ 1號線與dbo.Equip中的Line_num相同,例如29,則Qty_num是4;但如果@ Line1的輸出與上面的Line_num(例如25)不一樣,則需要查找 Line_num(20,29,39)的列表。由於Line_num 29對於25來說太大,所以我需要 獲得29以上的Line_num,即20得到它的Qty_num 3.

我想在我的第二個Case語句中,它不知道要查看哪個Line_num當它是25時,所以我沒有得到3結果,但我不知道如何查找它並找到正確的Line_num以獲得Qty_num。 Line_num的列表在現實生活中很長,所以我不想用 用例語句來查找每個Line_num。有更好的方法嗎?

回答

0

這聽起來像你要求的是一種方法來獲取行號是最小值小於或等於@ Line1的行。

因此,而不是一個case語句,你可以這樣做:

SELECT @Line2 = Line_num 
    ,@Qty = Qty_num 
FROM dbo.Equip 
WHERE Line_num = (
    SELECT TOP 1 Line_num 
    FROM dbo.Equip 
    WHERE Line_num <= @Line1 
    ORDER BY Line_num DESC 
) 
+0

這個作品!感謝您的明智解決方案。 – angelcake 2015-02-11 23:55:19