我正在尝试在QPS_Bonus表中满足某些条件时从QPS_Bonus_Tier表中检索数据。子查询中的Select语句可以工作并检索所需的行,但是我收到错误 当子查询未与EXISTS一起引入时,只能在选择列表中指定一个表达式。 当我尝试运行更新查询时。
我应该如何构建此查询?先感谢您。我正在运行SQL Server。 SID是我要更新的表的标识列。
Update QPS_Bonus
SET QPS_Bonus.BonusRate=T.BonusRate
from QPS_Bonus B, QPS_Bonus_Tier T
where B.SID IN
(
Select MAX(T.ProductionLevel) as ProdLevel, B.SID
from QPS_Bonus B
INNER JOIN
QPS_Bonus_Tier T on T.ProductionLevel <=B.Production
GROUP BY B.SID )
MAX(ProductionLevel)存在,因为每个层都有一系列生产值,例如: 1.2-1.39都是第2层,1.4-1.59都是第3层。这些范围需要是可编辑的,所以我无法对它们进行硬编码。这就是单独的QPS_Bonus_Tier表的原因。
答案 0 :(得分:0)
在IN
内使用子查询时,您应该只返回一列。据我所知,你不需要 ProdLevel 。
我认为这可以为您提供所需的输出:
Update QPS_Bonus
SET QPS_Bonus.BonusRate=T.BonusRate
from QPS_Bonus B, QPS_Bonus_Tier T
where B.SID IN
(
Select B.SID
from QPS_Bonus B
INNER JOIN
QPS_Bonus_Tier T on T.ProductionLevel <=B.Production
GROUP BY B.SID )