Iは、次の(サンプル)データを持つテーブルpoint
を有する:同じテーブル内の別の列に基づいて空の列を更新
datekey pointkey filter_key t_key
-----------------------------------
(5506061, 37, NULL, 1),
(5506061, 37, NULL, 1),
(5506061, 37, NULL, 1),
(5506061, 37, NULL, 1),
(5506061, 37, NULL, 1),
(5506061, 37, NULL, 1),
(5506763, 37, NULL, 2),
(5506763, 37, NULL, 2),
(5506763, 37, NULL, 2),
(45643, 97, NULL, 2),
(45643, 97, NULL, 2),
(45643, 97, NULL, 2),
(45643, 97, NULL, 2),
(45643, 97, NULL, 2),
(45643, 97, NULL, 2),
(1234, 83, NULL, 1),
(1234, 83, NULL, 1),
(1234, 83, NULL, 1),
(1234, 83, NULL, 1),
(1234, 83, NULL, 1),
(1234, 83, NULL, 1),
(1234, 84, NULL, 1),
(1234, 84, NULL, 1),
(1234, 84, NULL, 1),
(1234, 84, NULL, 1),
(1234, 84, NULL, 1),
(1234, 84, NULL, 1),
(45645, 97, NULL, 1),
(45645, 97, NULL, 2),
(45645, 97, NULL, 2),
(45645, 97, NULL, 2),
(45645, 97, NULL, 2),
(45645, 97, NULL, 2)
上記行の組み合わせは、同じ1~6倍とすることができます。これで、上記の例の最初の6行が好きです。この表には一意のキーはありません。この表には、上記のような数百万行があります。
この表をNULL列(filter_key)を埋めるように更新したいとします。この列では、値1と2が必要です.t_key列の '2'の場合、2もfilter_key列になければなりません。 t_key列の1の場合、最初のレコードの '1'だけを1回だけ欲しければ、他のすべての列は '2'でなければなりません。これは見つけることRow_Number
とCASE
声明
一度最初のレコード中で「1」を使用して行うことができます
5506061 37 1 1
5506061 37 2 1
5506061 37 2 1
5506061 37 2 1
5506061 37 2 1
5506061 37 2 1
5506763 37 2 2
5506763 37 2 2
5506763 37 2 2
45643 97 2 2
45643 97 2 2
45643 97 2 2
45643 97 2 2
45643 97 2 2
45643 97 2 2
1234 83 1 1
1234 83 2 1
1234 83 2 1
1234 83 2 1
1234 83 2 1
1234 83 2 1
1234 84 1 1
1234 84 2 1
1234 84 2 1
1234 84 2 1
1234 84 2 1
1234 84 2 1
45645 97 1 1
45645 97 2 2
45645 97 2 2
45645 97 2 2
45645 97 2 2
45645 97 2 2
以下の更新クエリを実行する十分ですか? Postgres?オラクル? DB2?ファイアバード? –
't_key'が' 3'または '1'または' 2'以外のときに何が起こるか –
@a_horse_with_no_name ms sql server 2014 – sql123