2017-09-28 23 views
0

に多くの行をマージ:MySQLは私のようなデータ構造を持つテーブルが空でない値を持つ1

+-----------+-----------+-----------+-----------+ 
| member_id | bank_name | bank_ac | ac_holder | 
+-----------+-----------+-----------+-----------+ 
|  14 |   | 012-000 |   | 
|  14 |   | 012-001 |  Andy | 
|  14 | CR Bank | 012-002 |  Jacky | 
+-----------+-----------+-----------+-----------+ 

私は必要なものは、最初の空でない値で満たされたすべての列を持つ一つのエントリを選択することです。 As:

+-----------+-----------+-----------+-----------+ 
| member_id | bank_name | bank_ac | ac_holder | 
+-----------+-----------+-----------+-----------+ 
|  14 | CR Bank | 012-000 |  Andy | 
+-----------+-----------+-----------+-----------+ 

私はどのように起動するのかわかりません。誰かが私に提案を与えることができますか?

ps:空のフィールドはNULLではなく、空の文字列です。あなたはケース句をあなたのデータは「のような空の値が含まれている場合は、いくつかの集計

select member_id, 
min(bank_name) bank_name, 
min(bank_ac) bank_ac, 
min(ac_holder) ac_holder 
from demo 
group by member_id 

DEMO

を使用することができますhere

+0

'Andy'がJacky''の上に保持されますこれにより、ロジックは何ですか?のための別の回避策 –

+0

助けてくれてありがとうTim、私は最初に空ではない値が必要です。アンディはジャッキーよりも早く登場するので、私はアンディを得ます – user3711105

+0

2つの銀行名があるかもしれないと仮定できますか?それとも3つ? 'bank_name'カラムと' ac_holder'カラムだけに欠損値があると仮定できますか? –

答えて

1

を提供 スキーマを」(ノートヌルが同じではありません「」)に置くことができます集約関数の値

のこれらのタイプをスキップします

DEMO

あなたの質問

select member_id, 
substring_index(group_concat(case when bank_name is not null and bank_name <> '' then bank_name end order by your_auto_increment_col asc) ,',',1) bank_name, 
substring_index(group_concat(case when bank_ac is not null and bank_ac <> '' then bank_ac end order by your_auto_increment_col asc) ,',',1) bank_ac, 
substring_index(group_concat(case when ac_holder is not null and ac_holder <> '' then ac_holder end order by your_auto_increment_col asc) ,',',1) ac_holder 
from demo 
group by member_id 

DEMO

+0

助けてくれてありがとう、私は試しましたが、そのような空でないフィールドはnullではなく ""です。 – user3711105

+0

http://sqlfiddle.com/ –

+0

を使用してサンプルデータを提供してください。http://sqlfiddle.com/#!9/8ee3cf – user3711105

関連する問題