2016-10-02 33 views
2

私の問題はかなりシンプルですが、私は2週間それに固執しています。SQLクエリの結果をCSV形式に変換する方法

私はそのように見て、SQLクエリの結果があります。

USR Count DATE 
u1  9 160920 
U1  2 160918 
U1  5 160922 
U2  19 160924 
U3  2 160919 
U3  1 160921 
U4  12 160921 

をそして、私は仕事で、サーバー上による制限のためにBASHを使用しているように見えるためにCSV形式でこの結果を変換したい:

;160918;160919;160920;160921;160922;160923;160924 
U1;  2;  0;  9;  0;  5;  0;  0 
U2;  0;  0;  0;  0;  0;  0; 19 
U3;  0;  2;  0;  1;  0;  0;  0 
U4;  0;  0;  0; 12;  0;  0;  0 

私がこだわっているが、私はcsv形式として行の変換に成功するが、私は1行に重複したユーザーを再編成しようとすると、私は無残に失敗します。

ヒントやアイデアはありますか?

+0

自分でSQLクエリを実行しますか? OUTFILE(mysql)または同等のものを使用できますか? – user993553

+0

あなたは結果を得るためにSQLスプールを使うことができます –

+1

私は先に言いました:あなたが入力から(クエリ結果)どのように意図された出力に来るかわかりません。これを手動で行う場合、どのようなルールを適用していますか? – Sven

答えて

2
SELECT Z.Col1 AS " ", 
     MAX(CASE WHEN Z.Col3 = 160918 THEN Z.Col2 ELSE 0 END) "160918", 
     MAX(CASE WHEN Z.Col3 = 160919 THEN Z.Col2 ELSE 0 END) "160919", 
     MAX(CASE WHEN Z.Col3 = 160920 THEN Z.Col2 ELSE 0 END) "160920", 
     MAX(CASE WHEN Z.Col3 = 160921 THEN Z.Col2 ELSE 0 END) "160921", 
     MAX(CASE WHEN Z.Col3 = 160922 THEN Z.Col2 ELSE 0 END) "160922", 
     MAX(CASE WHEN Z.Col3 = 160923 THEN Z.Col2 ELSE 0 END) "160923", 
     MAX(CASE WHEN Z.Col3 = 160924 THEN Z.Col2 ELSE 0 END) "160924" 
    FROM 
     (
     SELECT * 
      FROM 
     (SELECT 'u1' AS Col1, 9 AS Col2, 160920 AS Col3) UNION ALL 
     (SELECT 'u1' AS Col1, 2 AS Col2, 160918 AS Col3) UNION ALL 
     (SELECT 'u2' AS Col1, 19 AS Col2, 160924 AS Col3) UNION ALL 
     (SELECT 'u3' AS Col1, 2 AS Col2, 160919 AS Col3) UNION ALL 
     (SELECT 'u4' AS Col1, 1 AS Col2, 160921 AS Col3) UNION ALL 
     (SELECT 'u4' AS Col1, 12 AS Col2, 160921 AS Col3) 
     ) Z 
    GROUP BY Z.Col1 
    ORDER BY Z.Col1 
; 
+0

ちょっと微調整して、結果はまさに私がそれを望んでいた方法でした。 ありがとうTeja! –

+0

Ur welcome ..... – Teja

関連する問題