0

15 のクレジット カード リーダーでトランザクションのデータベースをチェックするプログラムを作成しています。プログラムのポイントは、機械的な問題が発生していないことを確認するために、事前に定義された日付範囲でリーダーの販売を確認することです. 一般的に言えば、リーダーが事前定義された日付範囲の販売を記録しない場合は、リーダーの動作を確認する必要があります。問題は、トランザクション数を「カウント」しているため、NULL ではなく「0」が表示され、トランザクションがない場合にのみメールを受信したいということです...どうすれば変更できますか?その場合、「0」から NULL までカウントしますか? 私のクエリは以下の通りです:

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

3 に答える 3

6

カウントを 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
于 2013-03-13T01:13:21.970 に答える
3
 select CASE WHEN COUNT(sTerminal) = 0 THEN NULL ELSE COUNT(sTerminal) END AS Terminal
 from ....
 where ....
于 2013-03-13T01:11:15.487 に答える
2

このロジックを C# で処理しない理由:

var numberOfSales = GetNumberOfSales(); // Your sql will execute

if (numberOfSales > 0)
{
    SendEmails();
}
于 2013-03-13T01:12:20.620 に答える