web-dev-qa-db-ja.com

「いいね」によるSQLグループ

毎月の顧客連絡活動を生成するクエリがあります。いくつかのカテゴリ(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%')
17
Jennifer Hart

これは機能するはずです:

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
20
Tom H

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'、 'C​​all') 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
1
test