使用IN与EXISTS与Subquery-SQL Server

时间:2015-03-04 19:04:43

标签: sql-server

我正在尝试在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表的原因。

1 个答案:

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