質問

私は私たちのクライアントに電子メールを送るために人々が使用できる形式を持っています。ユーザは、2つの缶詰メッセージ(メッセージ「1」またはメッセージ「2」)を選択することができるオプションを有する。シーンの背後にある「送信」ボタンを押すたびに、それが「レコード」テーブルにログインします(エラーハンドラを通してそれを作る限り)。

レコードテーブルに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とTWOをカウントするクエリが必要です。だから結果セットはこのようなものを見るべきです:

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

私はカウント、グループバイス、ビング、しばらくの中、ユニオン、ネストされた選択を使用しましたが、私が言ったように、私はおそらく比較的簡単な何かを複雑にしています。

役に立ちましたか?

解決

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
.

他のヒント

考慮すべき別の選択肢は、変換でピボットクエリを使用することです。

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_ID1、および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
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top