如何将列值用于“IN”子句? SQL服务器

时间:2015-07-31 03:10:31

标签: sql sql-server-2008

表:Othercharges

CODE     NAME      PRIMARYKEY      GROUPBY     JAN      <- columns
WDS      WOOD          1           'NULL'      1000     <- values
FDS      FOOD          2           'NULL'      2000
WATER    WATER         3           'NULL'      3000
TOT      TOTAL         4            1,2             

我希望得到GROUPBY的值并将其放入IN条款中。因为我想使用基于JAN

GROUPBY得到PRIMARYKEY的和

这是我的代码:

UPDATE othercharges
SET JAN = (SELECT SUM(jan) 
           FROM Othercharges 
           WHERE primarykey IN (groupby) AND code = code)
WHERE Groupby <> 'NULL'

使用上面的代码获取NULL结果:

CODE     NAME      PRIMARYKEY      GROUPBY     JAN      <- columns
WDS      WOOD          1           'NULL'      1000     <- values
FDS      FOOD          2           'NULL'      2000
WATER    WATER         3           'NULL'      3000
TOT      TOTAL         4            1,2        NULL     <- my code result

假定的输出:

CODE     NAME      PRIMARYKEY      GROUPBY     JAN      <- columns
WDS      WOOD          1           'NULL'      1000     <- values
FDS      FOOD          2           'NULL'      2000
WATER    WATER         3           'NULL'      3000
TOT      TOTAL         4            1,2        3000     <- the should be result

2 个答案:

答案 0 :(得分:1)

您无法使用in。值'1,2'是一个长度为3的字符串,就像'abc'一样。它不是两种元素。

您可以使用like

执行您想要的操作
UPDATE othercharges
    SET JAN = (SELECT SUM(oc2.jan)
               FROM Othercharges oc2
               WHERE ',' + oc2.groupby + ',' like '%' + cast(othercharges.primarykey as varchar(255)) + '%' and
                     oc2.acctcode = othercharges.acctcode
             )
    WHERE Groupby <> 'NULL';

此外,您需要表别名才能在acctcode上进行比较。并且,您假设'NULL'是一个字符串。如果是数据库值,则不要使用双引号,<>是不合适的。

答案 1 :(得分:0)

Group By是String还是VarChar,因此有效的值等于&#34; 1,2&#34;实际上代码不起作用,因为 它需要像

&#34; IN(1,2)&#34;

不喜欢

&#34; IN(&#39; 1,2&#39;)&#34;

希望你理解