毎月の顧客連絡活動を生成するクエリがあります。いくつかのカテゴリ(Eメール送信、Eメール入力、電話イン、電話アウトなど)があります。8つの異なる「タイプ」の結果があります。すべての「メール」用とすべての「電話」用の2つのグループが必要です。現在、WHERE TYPE LIKE '%Email%'とTYPE LIKE '%Call%'があります。ただし、これら2つの「LIKE」ステートメントでグループ化することはできません。誰かが私がこれを最もよく達成する方法を知っていますか?
例として、クエリを次のように簡略化しました。
SELECT TYPE
FROM dbo.HISTORY
WHERE (TYPE LIKE '%email%') OR
(TYPE LIKE '%call%')
これは機能するはずです:
SELECT
TYPE
FROM
dbo.HISTORY
WHERE
(TYPE LIKE '%email%') OR (TYPE LIKE '%call%')
GROUP BY
CASE
WHEN type LIKE '%email%' THEN 'email'
WHEN type LIKE '%call%' THEN 'call'
ELSE NULL
END
ただし、私のアドバイスは、各タイプが電子メールと見なされるか電話と見なされるかを示す別の列を持つタイプコードテーブルを用意することです。そうすれば、特定の形式に従ったタイプ名に依存することはなく、将来的には忘れられることは間違いありません。その後、簡単にグループ化できます。
SELECT
H.type
FROM
dbo.History
INNER JOIN dbo.History_Types HT ON
HT.history_type_code = H.history_type_code AND
HT.history_type_category IN ('Email', 'Call')
GROUP BY
HT.history_type_category
SELECT H.type FROM dbo.History INNER JOIN dbo.History_Types HT ON HT.history_type_code = H.history_type_code AND HT.history_type_category IN( 'Email'、 'Call') GROUP BY HT.history_type_category
Filterステートメントをwhere句に入れる方が良いのではないでしょうか。
SELECT
H.type FROM
dbo.History
INNER JOIN dbo.History_Types HT ON
HT.history_type_code = H.history_type_code
WHERE **HT.history_type_category IN ('Email', 'Call')**
GROUP BY HT.history_type_category