2016-12-13 8 views
-1

私は次のmySQLクエリを使用して、個々の失敗データとグループを、さまざまなタイプの失敗の月と頻度でリストします。SQLグループ化:グループ化されたデータで毎月のカラムを作成する

SELECT (CASE WHEN MONTH(runtable.time) = 1 THEN 'Jan' 
WHEN MONTH(runtable.time) = 2 THEN 'FEB' 
WHEN MONTH(runtable.time) = 3 THEN 'MAR' 
WHEN MONTH(runtable.time) = 4 THEN 'APR' 
WHEN MONTH(runtable.time) = 5 THEN 'MAY' 
WHEN MONTH(runtable.time) = 6 THEN 'JUN' 
WHEN MONTH(runtable.time) = 7 THEN 'JUL' 
WHEN MONTH(runtable.time) = 8 THEN 'AUG' 
WHEN MONTH(runtable.time) = 9 THEN 'SEP' 
WHEN MONTH(runtable.time) = 10 THEN 'OCT' 
WHEN MONTH(runtable.time) = 11 THEN 'NOV' 
WHEN MONTH(runtable.time) = 12 THEN 'DEC' 
ELSE 'Error' END) as date_month, runtable.operation, pareto.failure 
FROM runtable 
JOIN pareto ON pareto.run_id = runtable.id 
WHERE runtable.time BETWEEN '2016-01-01 00:00:00' AND '2016-12-13 23:59:59'  
AND runtable.operation IN ('d','hr') 
GROUP BY MONTH(runtable.time), pareto.failure 
ORDER BY MONTH(runtable.time) desc, n desc; 

私は今年の合計と一緒にテーブル内で別々の列としてヶ月を持ってできるようにしたいが、これを行う方法を知らないだだろう。私の現在の問題は、私がこれをやろうとした唯一の方法は、月ごとに合計または大文字を使用することですが、その後、毎月異なる失敗タイプの数をグループ化することができません。

+1

はhttp://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-を参照してください。私にとって非常にシンプルなSQLクエリ – Strawberry

答えて

0

方法はまさにあなたが記述したものです:これを解決するには、CASE WHEN関数とSUM関数を使う必要があります。このスレッドを見てみましょう:

how to select 2 table like this

をところで、あなたのコード例として、ケース機能せずに数ヶ月を記述するための簡単な方法があります。見てみましょう:

MySQL DATE_FORMAT() Function

何かのように:select DATE_FORMAT(now(),'%m')

私はエラー列を使用して、問題を理解していませんでした。どんな問題に遭遇しているかを明記してください。

幸運を祈る!

+0

「2テーブルリンクを選択する方法」は動作していないようです。 – Themtbboat

+0

また、問題は、毎月SUMを使用して失敗の頻度を数えてみましたが、無効なクエリの最後に個々の障害タイプをグループ化しようとしています。 – Themtbboat

+0

もう一度チェックして、私はリンクを修正します –

0

あなたが知っている限り、各操作の月ごとの合計(pareto.failues)を探しています。

ここでそれを確認してください:http://rextester.com/MTDK27603

SELECT 
    runtable.operation, 
    pareto.failure, 
    COUNT(CASE WHEN MONTH(runtable.time) = 1 THEN 1 else NULL end) as 'Jan', 
    COUNT(CASE WHEN MONTH(runtable.time) = 2 THEN 1 else NULL end) as 'Feb', 
    COUNT(CASE WHEN MONTH(runtable.time) = 3 THEN 1 else NULL end) as 'Mar', 
    COUNT(CASE WHEN MONTH(runtable.time) = 4 THEN 1 else NULL end) as 'Apr', 
    COUNT(CASE WHEN MONTH(runtable.time) = 5 THEN 1 else NULL end) as 'May', 
    COUNT(CASE WHEN MONTH(runtable.time) = 6 THEN 1 else NULL end) as 'Jun', 
    COUNT(CASE WHEN MONTH(runtable.time) = 7 THEN 1 else NULL end) as 'Jul', 
    COUNT(CASE WHEN MONTH(runtable.time) = 8 THEN 1 else NULL end) as 'Aug', 
    COUNT(CASE WHEN MONTH(runtable.time) = 9 THEN 1 else NULL end) as 'Sep', 
    COUNT(CASE WHEN MONTH(runtable.time) = 10 THEN 1 else NULL end) as 'Oct', 
    COUNT(CASE WHEN MONTH(runtable.time) = 11 THEN 1 else NULL end) as 'Nov', 
    COUNT(CASE WHEN MONTH(runtable.time) = 12 THEN 1 else NULL end) as 'Dec', 
    COUNT(pareto.failure) as 'Total year' 
FROM 
    runtable 
    JOIN pareto 
     ON pareto.run_id = runtable.id 
WHERE 
    runtable.time BETWEEN '2016-01-01 00:00:00' AND '2016-12-13 23:59:59'  
    AND runtable.operation IN ('d','hr') 
GROUP BY 
    runtable.operation, pareto.failure 
; 
+0

お返事ありがとうございます。しかし、私は毎月の失敗の合計に、パレートの不一致の合計だけでなく、 – Themtbboat

+0

それから 'pareto.failure'でグループ化してください。 – McNets

+0

これを試したが、データを返さない。 – Themtbboat

関連する問題