5

SQL Database に多くのデータを含むテーブルがあり、一部の行がほぼ同一であるとします。たとえば、次のようになります。

|===========================================|
|           Message                         |
|===========================================|
|              ...                          |
|-------------------------------------------|
|    account is rejected: <aa>              |
|-------------------------------------------|
|    account is rejected: <bb>              |
|-------------------------------------------|
|    mailbox unavailable: 550 550 <1@b.com> |
|-------------------------------------------|
|    mailbox unavailable: 550 550 <2@b.com> |
|-------------------------------------------|
|                 ...                       |

私の目的では、最初の 2 行は同一で、最後の 2 行は同一であるため、クエリは返されるはずです

  1. アカウントが拒否されました:
  2. メールボックス利用不可: 550 550

行を選択し、「<」記号の後の文字を削除して実行するクエリを作成することを考えましたがDISTINCT、すべてを実行する方法がわかりませんSELECT

そのようなクエリを書くのを手伝ってもらえますか?

4

1 に答える 1

5

以下は、最初からすべてを削除します<

GROUP BYを使用するよりも柔軟性がありますDISTINCTが、この場合は同じことを達成します。

このCASEステートメントは、 が含まれていないメッセージの可能性に対応するためにあり<ます。常に<Thenがある場合は、ELSE代わりにセクションを使用してください。

SELECT
  CASE WHEN CHARINDEX('<', Message) = 0 THEN Message ELSE LEFT(Message, CHARINDEX('<', Message)-1)) END AS Message
FROM
  yourTable
GROUP BY
  CASE WHEN CHARINDEX('<', Message) = 0 THEN Message ELSE LEFT(Message, CHARINDEX('<', Message)-1)) END
于 2012-08-07T16:03:54.930 に答える