Sql 服务器:如何在 sql 服务器中查找等同于在 excel 中查找

Sql Server: how to LOOKUP in sql server equivalent to LOOKUP in excel

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 打印@Qty

在dbo.Equip table:

Line_num      Qty_num
20          3
29          4
39          5 

当@Line1的输出与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.

我认为在我的第 2 个 Case 语句中,当它是 25 时它不知道要查看哪个 Line_num,所以我没有得到 3 作为结果,但我不确定是什么查找并找到正确的 Line_num 以获得 Qty_num 的方法。 Line_num 的列表在现实生活中很长,所以我不想 使用 case 语句查找每个 Line_num。还有更好的办法吗?

听起来您要求的是一种获取行号为小于或等于@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
)