我知道这个问题似乎有点基础,但我想确保我的语法是正确的,因为这一行代码将经常运行:
对于包含在我的in子句中的所有行,我想对表“字母表”的A、B和C列进行求和。
我就是这样做的,但如果可能的话,我想确认一下:
SELECT SUM(A + B + C) as "subtotal" FROM alphabet WHERE id IN ('1','5','378');发布于 2011-07-02 20:40:33
如果id不是字符串,则不应该引用这些值。
SELECT SUM(A + B + C) as "subtotal" FROM alphabet WHERE id IN (1,5,378);这是可行的,但可能会有一个不明显的后果。如果任何行都具有A not null,而其他一行为null,则该行将退出求和,因为null加任何其他内容都为null,而SUM运算符忽略了null。因此,更安全的做法是:
SELECT SUM(A) + SUM(B) + SUM(C) as "subtotal" FROM alphabet WHERE id IN (1,5,378);这也存在同样的潜在问题,但不太可能发生,因为整个列必须为null。如果你仍然关心这个问题,有各种方言的具体方法来防御这个问题。最便携的是痛苦而冗长的:
SELECT SUM(
CASE
WHEN A IS NULL
THEN 0
ELSE A
END
+
CASE
WHEN B IS NULL
THEN 0
ELSE B
END
+
CASE
WHEN c IS NULL
THEN 0
ELSE C
END
) as "subtotal"
FROM alphabet
WHERE id IN (1,5,378);发布于 2014-06-30 10:11:12
declare
@a int = 0,
@b int = 5,
@c int = NULL
select
ISNULL(@a, 0) + ISNULL(@b, 0) + ISNULL(@c, 0)https://stackoverflow.com/questions/6559472
复制相似问题