2013-02-07 52 views
1

我最近开始自学(糟糕的)SQLite。有一件事让我感到恼火的是CASE表达式,即它使用短路评估。没有短路评估的CASE表达式?

有什么办法可以解决这个问题吗?我正在寻找不使用短路评估的CASE声明。

UPDATE [table]SET [counting_column] = 

(
CASE 
    when [column1] = NULL 
    then [counting_column] + 1 

    ... 

    when [column31] = NULL 
    then [counting_column] + 1 
end 
) 

我希望数据库中的每个条目都由每个case语句测试,而不仅仅是第一个评估为true的条目。任何帮助将非常感激。

注:我很抱歉,如果有一些明显的错误 - 我很新,所以这么容易请。

+3

您能举一个例子,您需要非短路评估吗? –

+2

取决于你正在尝试做什么 - 如果需要,你可以在对方内部放置多个案例......样本数据,预期结果 - 也许我们可以提供帮助。 – sgeddes

+0

谢谢你的回复。我编辑我的问题是更具体的,抱歉的含糊不清。 – user2052677

回答

1

如果您确实只是增加1〜counting_column为满足每一个条件,你可以使用ňCASE语句链和结果相加。每个人CASE提供01,所有这些都加在一起并加到当前值counting_column

UPDATE [table] SET [counting_column] = 
(
    [counting_column] + 
    (CASE when [column1] IS NULL then 1 ELSE 0 END) + 
    (CASE when [column2] IS NULL then 1 ELSE 0 END) + 
    ... 
    ... 
    (CASE when [column30] IS NULL then 1 ELSE 0 END) + 
    (CASE when [column31] IS NULL then 1 ELSE 0 END) 
) 

请注意,我已经改变了= NULLIS NULLNULL是一个特殊的非价值,无法与平等=进行比较。

我还要指出的是,虽然[]附带的标识符在SQLite中是可以的,但这主要是为了与T-SQL兼容。更标准的方法是使用双引号,如UPDATE "table" SET "counting_column" = ...

+0

非常感谢,这确实是我所做的一切,它运作得非常好。就像我说的那样,我不擅长这一点,所以我不能这么做。 – user2052677