2016-05-09 5 views
1

私はアプリケーションテーブルを格納するSQLテーブルを持っています。私はこの例のように値を格納する列の誤り、どのように値が変数のようなSQLで最も頻繁な値を取得するのですか?

+------+--------+----------------------------------------------+ 
| id | name | error          | 
+------+--------+----------------------------------------------+ 
| 1 | john | Flushing folder error on folderid 456  | 
| 2 | paul | Flushing folder error on folderid 440  | 
| 3 | gary | Error connection has timed out on source 320| 
| 4 | ade | Error connection has timed out on source 220| 
| 5 | fred | Error connection has timed out on source 821| 
| 6 | bob | Reading errors occured on folder 400  | 
| 7 | ade | Error connection has timed out on source 320| 
| 8 | fred | Error connection has timed out on source 320| 
| 9 | bob | Reading errors occured on folder 402  | 
| 10 | ade | Error connection has timed out on source 320| 
| 11 | fred | Error connection has timed out on source 320| 
| 12 | bob | Reading errors occured on folder 400  | 
| 13 | paul | Flushing folder error on folderid 100  | 
+------+--------+----------------------------------------------+ 

を持っている私が取得したいと思い、結果は次のようなものです:

+-------------------------------------------+------------+ 
| Error Like        | Occurence | 
+-------------------------------------------+------------+ 
| Error connection has timed out on source | 7   | 
| Flushing folder error on folderid   | 3   | 
|Reading errors occured on folder   | 3   | 
+-------------------------------------------+------------+ 

は、私はSQLであることを行うことがとにかくありますか?エラーは変数であり、考えられるすべてのエラーの網羅的なリストはありません。

ありがとうございます!

答えて

0

は、最後の桁の部分と、カウントを削除します。

クエリ

SELECT LEFT(error, LEN(error) - 4) AS [Error Like], 
COUNT(LEFT(error, LEN(error) - 4)) AS [Occurence] 
FROM tbl_error 
GROUP BY LEFT(error, LEN(error) - 4); 

またはあなたはまた、サブクエリでそれを行うことができます。

クエリ

SELECT t.[Error Like], COUNT(t.[Error Like]) AS [Occurence] FROM(
    SELECT LEFT(error, LEN(error) - 4) AS [Error Like] 
    FROM tbl_error 
)t 
GROUP BY t.[Error Like]; 

あなたが最後の桁部分について認識していない場合は、

クエリ

SELECT t.[Error Like], COUNT(t.[Error Like]) as [Occurence] FROM(
    SELECT LEFT(error, LEN(error) - CHARINDEX(' ', REVERSE(error), 1)) AS [Error Like] 
    FROM tbl_error 
)t 
GROUP BY t.[Error Like] 
ORDER BY COUNT(t.[Error Like]) desc, t.[Error Like]; 

結果

+--------------------------------------------+-----------+ 
| Error Like         | Occurence | 
+--------------------------------------------+-----------+ 
| Error connection has timed out on source | 7   | 
| Flushing folder error on folderid   | 3   | 
| Reading errors occured on folder   | 3   | 
+--------------------------------------------+-----------+ 

Find a demo here

+0

これにより、問題が部分的に解決されます。 "xxxxフォルダのエラー"のようなエラーが発生することがあります。ここの数字部分は、エラーメッセージの最後の4文字ではありません。 –

+0

@RafaAyadi:問題の正確な説明を入力しないと、適切な答えを得ることは困難です。 –

+0

次に、 'REARSE'で' CHARINDEX'を使用するかもしれません。 – Wanderer

0

あなたは最後の4つの文字と集計を取り除くしたいように見えます:

select left(error, len(error) - 4) as ErrorLike, count(*) 
from applogs 
group by left(error, len(error) - 4) 
order by count(*) desc; 
+0

とすると、部分的に問題が解決します。 "xxxxフォルダのエラー"のようなエラーが発生することがあります。ここの数字部分はエラーメッセージ –

+2

@RafaAyadiの最後の4文字ではなく、あなたのsamleデータを調整してください! – jarlh

+0

@jarlh私はエラーメッセージを生成する人ではありません。これらは、Google/Office365 APIからの応答として生成されるエラーメッセージです。私はこれに手を差し伸べていません。 –

0

は、以下のクエリがタイムアウトエラーIDのサイズをハードコーディングで動作します。テーブル名をLogDetails

SELECT E.[ErrorDetail], COUNT(E.[ErrorDetail]) [ErrorCount], 
FROM (
    SELECT REPLACE(error, Substring(error, PatIndex('%[0-9]%', error), LEN(error)), '') [ErrorDetail] 
    FROM LogDetails 
    WHERE error LIKE '%[0-9]%' 
) E 
GROUP BY E.[ErrorDetail] 
ORDER BY COUNT(E.[ErrorDetail]) DESC 
関連する問題