在SQL中合并两行

Jas*_*son 34 sql union join

假设我有一个包含以下信息的表:

FK | Field1 | Field2
=====================
3  | ABC    | *NULL*
3  | *NULL* | DEF
Run Code Online (Sandbox Code Playgroud)

有没有办法我可以在桌子上执行选择以获得以下内容

FK | Field1 | Field2
=====================
3  | ABC    | DEF
Run Code Online (Sandbox Code Playgroud)

谢谢

编辑:修复field2名称以便清楚

Che*_*vel 17

聚合函数可以帮助您在这里.聚合函数忽略NULLs(至少在SQL Server,Oracle和Jet/Access上是这样),因此您可以使用这样的查询(在SQL Server Express 2008 R2上测试):

SELECT
    FK,
    MAX(Field1) AS Field1,
    MAX(Field2) AS Field2
FROM
    table1
GROUP BY
    FK;
Run Code Online (Sandbox Code Playgroud)

我使用过MAX,但是从GROUP BY行中选择一个值的任何聚合都应该有效.

测试数据:

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');
Run Code Online (Sandbox Code Playgroud)

结果:

FK  Field1  Field2
--  ------  ------
3   ABC     DEF
4   JKL     PQR
Run Code Online (Sandbox Code Playgroud)


Dus*_*ine 7

根据您未包含的某些数据规则,有几种方法,但这是使用您提供的内容的一种方式.

SELECT
    t1.Field1,
    t2.Field2
FROM Table1 t1
    LEFT JOIN Table1 t2 ON t1.FK = t2.FK AND t2.Field1 IS NULL
Run Code Online (Sandbox Code Playgroud)

其他方式:

SELECT
    t1.Field1,
    (SELECT Field2 FROM Table2 t2 WHERE t2.FK = t1.FK AND Field1 IS NULL) AS Field2
FROM Table1 t1
Run Code Online (Sandbox Code Playgroud)