gpt4 book ai didi

sql - 检查列值是否为零 MS SQL Server

转载 作者:行者123 更新时间:2023-12-03 23:12:16 24 4
gpt4 key购买 nike

我有一个 View ,它有一个复杂的 CASE 语句来确定其中一列的值。

SELECT a.itemcode, count(*) total, b.foo
CASE
WHEN foo IN ('aab', 'aac')
THEN 1
WHEN foo IN ('qqq', 'fff')
THEN 2
WHEN foo IN ('foo', 'bar')
THEN 10 % count(*)
ELSE 9 % count(*)
END AS other_total

FROM a INNER JOIN b ON a.itemcode = b.itemcode
GROUP BY itemcode, foo

我想添加一个检查 other_total 列的值。如果是 0 ,我想将值设置为 1 .

显然,我可以用一个 CASE 将整个事情包围起来。陈述...
CASE ( CASE 
WHEN foo IN ('aab', 'aac')
THEN 1
WHEN foo IN ('qqq', 'fff')
THEN 2
WHEN foo IN ('foo', 'bar')
THEN 10 % count(*)
ELSE 9 % count(*)
END )
WHEN 0 THEN 1
ELSE CASE
WHEN foo IN ('aab', 'aac')
THEN 1
WHEN foo IN ('qqq', 'fff')
THEN 2
WHEN foo IN ('foo', 'bar')
THEN 10 % count(*)
ELSE 9 % count(*)
END
END AS other_total

但这只是有点乱,似乎应该有更简单的方法。

有没有另一个功能,类似于 ISNULL() ,如果它等于零,那将允许我更改列的值?

回答

感谢 gofr1 的回答,我能够解决这个问题。如果 case 语句等于 0,我使用 NULLIF 函数返回 NULL,然后如果 NULLIF 函数返回 NULL,则用 ISNULL 函数将值设置为 1。
SELECT a.itemcode, count(*) total, b.foo,
ISNULL (
NULLIF (
CASE
WHEN foo IN ('aab', 'aac')
THEN 1
WHEN foo IN ('qqq', 'fff')
THEN 2
WHEN foo IN ('foo', 'bar')
THEN 10 % count(*)
ELSE 9 % count(*)
END
), 0)
), 1) other_total

FROM a INNER JOIN b ON a.itemcode = b.itemcode
GROUP BY itemcode, foo

最佳答案

您可以使用 NULLIF

Returns a null value if the two specified expressions are equal.


CASE WHEN 
NULLIF(
CASE WHEN foo IN ('aab', 'aac') THEN 1
WHEN foo IN ('qqq', 'fff') THEN 2
WHEN foo IN ('foo', 'bar') THEN 10 % count(*)
ELSE 9 % count(*)
END
,0) IS NULL THEN 0 ELSE 1 END
AS other_total

如果值 = 0那么它变成 NULL否则该值在输出中。然后我们使用 CASE WHEN value IS NULL then 0 else 1 .

关于sql - 检查列值是否为零 MS SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40235121/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com