如何在“IN”子句中使用列值?SQL server

如何在“IN”子句中使用列值?SQL server,sql,sql-server-2008,Sql,Sql Server 2008,表:其他费用: 使用上面的代码会得到空结果: 假设输出: CODE NAME PRIMARYKEY GROUPBY JAN <- columns WDS WOOD 1 'NULL' 1000 <- values FDS FOOD 2 'NULL' 2000 WATER WATER 3

表:其他费用:

使用上面的代码会得到空结果:

假设输出:

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
您不能为此使用中。值“1,2”是一个长度为3的字符串,与“abc”类似。这不是两个要素,某种程度上

您可以使用以下工具做您想做的事情:


此外,还需要表别名,以便在acctcode上进行比较。并且,假设“NULL”是一个字符串。如果是数据库值,则不要使用双引号,这是不合适的。

是按is字符串或VarChar分组的,因此该值实际上等于1,2,因为 它需要像

在1,2

不像

在‘1,2’


希望您理解

Gordon,我认为最好将条件更改为:WHERE'、“+oc2.groupby+”、“%”、“%”、“+castothercharges.primarykey as varchar255+”、“%”-即添加comas以防止在这种情况下出现不必要的值,”、10、“、比如“1”@Gordon linoff您给我的代码仍然会给出“NULL”结果。有什么建议吗?@ChadJimenezCalamba我认为groupby列中的值是“NULL”而不是NULL。如果是这样,您需要将groupby“NULL”的转义字符改为groupby“NULL”。您可以尝试类似groupby的方法,如“%”+primarykey+“%”。但我不确定这是个好主意。我理解你的意思,但我可以使用任何替代方法吗?创建另一个表,该表可以返回组列表,如从grouptable中选择组,其中key=primarykey。我希望你能理解。
UPDATE othercharges
SET JAN = (SELECT SUM(jan) 
           FROM Othercharges 
           WHERE primarykey IN (groupby) AND code = code)
WHERE Groupby <> '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
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';