问题:
考虑一个包含以下数据的表:
FK | Field1 | Field2 |
---|---|---|
3 | ABC | NULL |
3 | NULL | DEF |
目标是从表中检索合并行,其中 Field1 和Field2 值针对相同的 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 分组的行中选择一个值。可以使用检索分组行中单个值的任何聚合函数。
示例数据和结果:
考虑以下示例数据:
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中文网其他相关文章!