入力データのテーブルが与えられた場合、同じレコードの兄弟列を記述する「フラグ列」のセットが必要です。
- Microsoft SQLServer2005を使用しています。
- まず、ターゲットテーブルにデータをロードする必要があります。次に、これらのフラグ列に値を配置するためのチェックを実行する必要があります。
たとえば、次のようなおもちゃのテーブルがあるとします。
CREATE TABLE zzz_test
(
color VARCHAR(10),
value_x INTEGER ,
value_y INTEGER ,
value_x_FLAG bit ,
value_y_FLAG bit
)
次に、次のおもちゃのデータがあります(「古い」2005 SQLバージョンのため、すべてのレコードに対してINSERT / VALUESステートメントを繰り返す必要があります)。
INSERT zzz_test(color,value_x,value_y)
VALUES('red',1,NULL)
INSERT zzz_test(color,value_x,value_y)
VALUES('green',NULL,NULL)
INSERT zzz_test(color,value_x,value_y)
VALUES('red',NULL,2)
INSERT zzz_test(color,value_x,value_y)
VALUES('red',1,3)
INSERT zzz_test(color,value_x,value_y)
VALUES('black',NULL,1)
INSERT zzz_test(color,value_x,value_y)
VALUES(NULL,3,2)
INSERT zzz_test(color,value_x,value_y)
VALUES('black',1,2)
INSERT zzz_test(color,value_x,value_y)
VALUES('red',3,4)
INSERT zzz_test(color,value_x,value_y)
VALUES('green',1,1)
INSERT zzz_test(color,value_x,value_y)
VALUES('blue',5,NULL)
ここで、値を内部に配置し、兄弟列とがであるかどうかvalue_x_FLAG
を評価する簡単な方法が必要です。value_y_FLAG
value_x
value_y
NULL
ISNULL()
、、、などの関数があることは知っていますが、別の列の値を指定して列を更新しようとしてCOALESCE()
いるため、これは当てはまらないと思います。
ステートメントを使用できることは知っていますIF / ELSE
が、フラグ変数の同じ「更新」ステートメントですべて一緒に機能するように、多くのブールフラグ(2 ^ n)のすべてのケースを設定するのは非常に複雑です。
どのように対処しますか?
すべてのフラグを設定した後、何らかの方法でテーブルを要約したいと思います。たとえば、COUNT
すべてのフラグ変数にを設定したい場合はCOUNT
、「色のカテゴリ」を指定します。
おそらく、サポートフラグ変数のセットは必要ありませんが、テーブルをはるかに読みやすくし、SQLコードもはるかに読みやすくするためにそれらを使用したいと思います。ありがとう!