2

クライアントにメールを送信するために使用できるフォームがあります。ユーザーは、2 つの定型メッセージ (メッセージ「1」またはメッセージ「2」) から選択するオプションがあります。舞台裏では、「SEND」ボタンを押すたびに、「RECORDS」テーブルにログインします (エラー ハンドラを通過する限り)。

RECORDS テーブルに 2 つの列があるとします。

CUST_ID  EMAIL_NUM
0000         1
0000         2
0000         1
0000         1
0001         2
0002         1
0002         1
0003         2
0003         2
0003         2

CUST_ID ごとに 1 と 2 を数えるクエリが必要です。したがって、結果セットは次のようになります。

CUST_ID  EMAIL_1_COUNT  EMAIL_2_COUNT
0000          3              1
0001          0              1
0002          2              0
0003          0              3

count、group by、havings、while、union、ネストされた select を使用しましたが、前述のように、比較的簡単なことを複雑にしすぎている可能性があります。

4

2 に答える 2

4
select
  CUST_ID,
  sum(iif(EMAIL_NUM = 1, 1, 0)) as EMAIL_1_COUNT,
  sum(iif(EMAIL_NUM = 2, 1, 0)) as EMAIL_2_COUNT
from
  RECORDS
group by
  CUST_ID
于 2012-01-23T16:24:52.940 に答える
1

考慮すべきもう 1 つのオプションは、TRANSFORM でピボット クエリを使用することです。

TRANSFORM NZ(Count(RECORDS.Email_NUm),0) AS CountOfEmail_NUm
SELECT RECORDS.CUST_ID
FROM RECORDS
GROUP BY RECORDS.CUST_ID
PIVOT RECORDS.Email_NUm;

CUST_IDただし、これにより、、、1およびの列見出しが生成されます2。ただし、電子メールの種類を含む別のテーブルがある場合は、価値があるかもしれません (特に、電子メールの種類が 2 よりも多い場合)。

SQLは次のようになります

TRANSFORM NZ(Count(r.Email_NUm),0) AS CountOfEmail_NUm
SELECT r.CUST_ID
FROM RECORDS r
     INNER JOIN EMAIL_TYPES et
     ON r.Email_NUm = et.Email_NUm
GROUP BY r.CUST_ID
PIVOT et.TYPE_NAME;

この出力の生成

   CUST_ID | Work | Home 
   -------   ----   ----
   0000    | 3    | 1
   0001    | 0    | 1
   0002    | 2    | 0
   0003    | 0    | 3
于 2012-01-23T16:56:36.917 に答える