2017-01-11 5 views
0

次の形式のMySQLテーブルがあります。これは実行しているプログラムからの出力であり、変更できません。MySQL:列の値に基づいて複数行から1行にデータを移動

+---+------------------------+ 
| | A B C D E | 
+---+------------------------+ 
| | model amz wmt abt tgt | 
| 1 | c3000 100    | 
| 2 | c3000  200   | 
| 3 | c3000   150  | 
| 4 | c3000    125 | 
| 5 | A1234    135 | 
| 6 | A1234  105   | 
+---+------------------------+ 

列1の値、つまりモデルに基づいて、すべての行を1行に移動したいと考えています。私は

select model,group_concat(wmt),group_concat(amz)  
from table_name 
group by model 

を使用してみました

+---+-----------------------+ 
| | A B C D E | 
+---+-----------------------+ 
| | model amz wmt abt tgt | 
| 1 | c3000 100 200 150 125 | 
| 2 | A1234 200 105  135 | 
+---+-----------------------+ 

そして私が手出力:注意点は、空白行が実際にブランクでないと

所望の出力ヌル文字に含まれているということですカンマでいっぱいです。

+---+----------------------------------+ 
| | A     B   | 
+---+----------------------------------+ 
| | model amz   wmt   | 
| 1 | c3000 ,,,,100,,,, ,,,200,,,, | 
| 2 | A1234 ,,200,,,,,, ,105,,,,,, | 
+---+----------------------------------+ 
+0

値がない場合は、空の文字列 ''''を保存するため、カンマが表示されます。欠損値に 'NULL'を使用した場合、group_concat()はNULLを無視します。 –

+0

@BillKarwin MySQLにデータをロードするソフトウェアがemtpy文字列を送信するため、NULLを使用できません。 –

+0

関数[NULLIF()]を参照(http://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html#function_nullif) –

答えて

1

TRIMおよびIFを使用して、空白値をnullに変換できます。

SELECT 
    model, 
    GROUP_CONCAT(IF(TRIM(wmt) = '', NULL, wmt)), 
    GROUP_CONCAT(IF(TRIM(amz) = '', NULL, amz)) 
FROM 
    table_name 
GROUP BY model 
+0

これは機能します。ありがとうございました –

1
SELECT 
    model, 
    MIN(amz) AS amz, 
    MIN(wmt) AS wmt, 
    MIN(abt) AS abt, 
    MIN(tgt) AS tgt 
FROM 
    table_name 
GROUP BY 
    model 
関連する問題