假设我有一个包含以下信息的表:
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)
根据您未包含的某些数据规则,有几种方法,但这是使用您提供的内容的一种方式.
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)