2016-12-08 5 views
0

で二回表示されることのように出力を変更します。mysqlの:私はSQLクエリから次のような出力を持っているいくつかの特定のレコードが異なるパラメータ

parent_id id  status 
1   NULL before 
2   19  before 
2   20  after 

のMySQL: :

select 
parent_id_B, 
id, 
IF(created_final_at >= @start_date, 'after', IF(created_final_at < @start_date AND created_final_at >= @back_end_date, 'before', IF(created_final_at IS NULL,NULL,'late'))) as status_inv 
from bblabla 

私は以下のものが必要もしidがNULLでstatusがbeforeならば、同じIDと親のidを持ち、ステータスは 'after'であるレコードを追加します。

parent_id id  status 
1   NULL before 
2   19  before 
2   20  after 
1   NULL after 

新しいテーブルを作成せずに、上位クエリをサブクエリとして使用したいとします。私はparent_id(カウントID)と後のステータス(平均カウント)でグループ化を実行したい。つまり、私は例に示されているのと同じ構造が必要であることを意味します。

答えて

0

joinもう1つの2行のクエリでクエリを実行できます。条件(on)が満たされると2行が生成され、それ以外の場合は元の値が使用されます(1回)。元の構造を維持し、クエリをサブクエリとして使用します。

select parent_id, id, coalesce(new_status, status) as status 
from (<your query>) as subquery 
left join 
    (select 'before' as new_status 
    union select 'after') as rowdoubler 
on id is null and status = 'before'; 

行がすでに(あなたは多分あなたのデータに応じて、その後、distinctを追加することができます)あなたの結果セットに存在するかどうかはチェックしません。

関連する問題