2017-11-27 2 views
0

SQLクエリの作成に問題があります。私は、行の1/4の値で自動的に列Cを埋める問い合わせを行うことができますどのようにこのような状況 My Sql列内の値をコピーするクエリ

1 4 text123

1   5 
1   6 
1   7 

ColumnA ColumnB ColumnC 
がありますか?

欲しい:columnA値= 1及びColumnB値= 5及びColumnC値= A = 1 ColumnC行の値及びB = 4を取ると、この

Column A Column B Column C 
ようなものとColumnC値を埋めるよりNULL場合

1 4 text123

1  5   text123 
1  6 
1  7 

私もcolumnA = 2 columnA = 3

+0

ので、Cの値が常にあればcolumnC値の前にされるように、コルA、列B、によって順序がある私のサンプルデータセットを使用して

ヌル? – xQbert

+0

はい。 「実」データの意味は – redpillcoders

+0

第1条(ID ColumnA)には4つの言語オプションEN/DE/FR/IT(ColumnB)があります。 (ENは何らかのテキスト(ColumnC)です)。その記事で空のフィールド(DE/FR/IT)をENの値で埋めるのではなく、別の言語のデータが空の場合は、次の記事ID 2と記事ID 3 – redpillcoders

答えて

1

ユーザー変数とケースstatemeをどうするのは簡単のような他のエントリのためにこれを必要としますnt:

このロジックは、他のRDBMシステムにあるLag/Lead解析/ウィンドウ関数をシミュレートします。 MySQLは現在ウィンドウ/分析関数をサポートしていません。

Working DEMO:

SELECT ColumnA 
    , ColumnB 
    , case when columnC is null then @PriorVal 
      else @PriorVal:=ColumnC end as ColumnC 
FROM YourTableName 
CROSS JOIN (SELECT @PriorVal:='') z 
ORDER BY ColumnA, ColumnB; 

我々はヌルでないC値を追跡し、次いで順columnA、ColumnBに基づいて、CにおけるNULL値のためにその値を代入するuservariable @PriorValを使用します。 columnCがnull以外の値を持つたびに、userVariable @PriorValueはCに設定され、その値が表示されます。 columnCがNULL値を持つたびに、代わりに格納されたPriorVal userVariableが表示されます。このアプローチは、順序に大きく依存します。

@PriorValは、クロスジョイント派生テーブル(z)で初期化されています。このメソッドは、2つの別々のステートメントを渡す必要がないため、PHPと組み合わせて使用​​する方が簡単です。それは以下実現

Insert into foo_47514588 values 
    (1,4,'text123') 
    ,(1,5,NULL) 
    ,(1,6,NULL) 
    ,(1,7,NULL) 
    ,(1,8,'text2') 
    ,(1,10,NULL) 
    ,(2,1,'Text3'); 

+----+---------+---------+---------+ 
| | ColumnA | ColumnB | COlumnC | 
+----+---------+---------+---------+ 
| 1 |  1 |  4 | text123 | 
| 2 |  1 |  5 | text123 | <--Added by case statement 
| 3 |  1 |  6 | text123 | <--Added by case statement 
| 4 |  1 |  7 | text123 | <--Added by case statement 
| 5 |  1 |  8 | text2 | 
| 6 |  1 |  10 | text2 | <--Added by case statement 
| 7 |  2 |  1 | Text3 | 
+----+---------+---------+---------+ 
関連する問題