【问题标题】:How to make a count of 0 show as NULL如何使计数 0 显示为 NULL
【发布时间】:2013-03-13 09:34:06
【问题描述】:

我正在编写一个程序来检查数据库中 15 个信用卡读卡器的交易。该计划的重点是检查阅读器在预定义日期范围内的销售情况,以确保我们没有遇到机械问题。一般而言,如果阅读器未在预定义的日期范围内记录销售,则应检查阅读器的操作。问题是,由于我正在“计算”交易数量,它会得出“0”而不是 NULL,如果没有任何交易,我只想收到一封电子邮件......我该如何更改如果是这种情况,从“0”计数到 NULL?我的查询如下:

SELECT        COUNT(sTerminal) AS Terminal
FROM            CC
WHERE        (dtCreated BETWEEN @startdate AND @enddate) AND (sTerminal = 'Swiper 1')

【问题讨论】:

    标签: sql sql-server-2005


    【解决方案1】:

    如果您希望计数为 NULL,您可以这样做:

    SELECT        NULLIF(COUNT(sTerminal), 0) AS Terminal
    FROM            CC
    WHERE        (dtCreated BETWEEN @startdate AND @enddate) AND (sTerminal = 'Swiper 1')
    

    如果您不想返回任何东西,这可能更有用,您可以发送HAVING:

    SELECT        COUNT(sTerminal) AS Terminal
    FROM            CC
    WHERE        (dtCreated BETWEEN @startdate AND @enddate) AND (sTerminal = 'Swiper 1')
    HAVING COUNT(sTerminal) > 0
    

    【讨论】:

    • NULLIF 看起来很酷。我每天都学到新东西。即使我尽量避免NULL。
    • @LuisSiquot 我很困惑,OP 说“如果是这种情况,我该如何将计数从“0”更改为 NULL?”,这是 NULLIF 应该做的。我误会了吗?
    • 请原谅我的错误 +1 实际上这比我的要好,因为它也返回正确的类型
    【解决方案2】:
     select CASE WHEN COUNT(sTerminal) = 0 THEN NULL ELSE COUNT(sTerminal) END AS Terminal
     from ....
     where ....
    

    【讨论】:

    • 我更喜欢在数据库中完成大部分工作,所以我喜欢你的回答。
    • 我同意,我发现让数据库运行查询然后继续使用 C# 更简洁、更容易
    【解决方案3】:

    为什么不在 C# 中处理这个逻辑:

    var numberOfSales = GetNumberOfSales(); // Your sql will execute
    
    if (numberOfSales > 0)
    {
        SendEmails();
    }
    

    【讨论】:

    • 我想我可以做到。但我不知道如何在 C# 逻辑中调用 SQL 函数......我一直在使用数据集并以这种方式填充信息
    • 我建议你找出来——这是完全可能的
    猜你喜欢
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2022-10-05
    • 2017-04-29
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多