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
)
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
)