問題:
次のデータを含むテーブルについて考えます:
FK | Field1 | Field2 |
---|---|---|
3 | ABC | NULL |
3 | NULL | DEF |
目的は、フィールド 1 とフィールド 2 の値が含まれるマージされた行をテーブルから取得することです。同じ FK に対して結合されます:
FK | Field1 | Field2 |
---|---|---|
3 | ABC | DEF |
解決策:
この結果を達成するには、集約関数を使用できます。集計関数は NULL 値を無視し、非 NULL 値のマージを許可します。たとえば、次のクエリ (SQL Server Express 2008 R2 でテスト済み) を使用できます。
SELECT FK, MAX(Field1) AS Field1, MAX(Field2) AS Field2 FROM table1 GROUP BY FK;
MAX 関数を使用して、FK でグループ化された行から 1 つの値を選択します。グループ化された行内の単一の値を取得する任意の集計関数を使用できます。
サンプル データと結果:
次のサンプル データを検討してください:
CREATE TABLE table1 (FK int, Field1 varchar(10), Field2 varchar(10)); INSERT INTO table1 VALUES (3, 'ABC', NULL); INSERT INTO table1 VALUES (3, NULL, 'DEF'); INSERT INTO table1 VALUES (4, 'GHI', NULL); INSERT INTO table1 VALUES (4, 'JKL', 'MNO'); INSERT INTO table1 VALUES (4, NULL, 'PQR');
このサンプル データに対してクエリを実行すると、次の結果が得られます。出力:
FK Field1 Field2 -- ------ ------ 3 ABC DEF 4 JKL PQR
このように、行は効果的にマージされ、Field1 列と Field2 列の同じ FK の非 NULL 値が結合されます。
以上が共通キーに基づいて SQL で NULL 値を含む行をマージするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。