ユーザー変数とケース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 |
+----+---------+---------+---------+
ので、Cの値が常にあればcolumnC値の前にされるように、コルA、列B、によって順序がある私のサンプルデータセットを使用して
ヌル? – xQbert
はい。 「実」データの意味は – redpillcoders
第1条(ID ColumnA)には4つの言語オプションEN/DE/FR/IT(ColumnB)があります。 (ENは何らかのテキスト(ColumnC)です)。その記事で空のフィールド(DE/FR/IT)をENの値で埋めるのではなく、別の言語のデータが空の場合は、次の記事ID 2と記事ID 3 – redpillcoders