Maison >base de données >tutoriel mysql >Comment puis-je fusionner des lignes avec des valeurs NULL dans SQL sur la base d'une clé commune ?

Comment puis-je fusionner des lignes avec des valeurs NULL dans SQL sur la base d'une clé commune ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-01 11:01:11217parcourir

How Can I Merge Rows with NULL Values in SQL Based on a Common Key?

Comment fusionner des lignes en SQL

Problème :

Considérons une table avec les données suivantes :

FK Field1 Field2
3 ABC NULL
3 NULL DEF

L'objectif est de récupérer une ligne fusionnée du tableau, où les valeurs Field1 et Field2 sont combinées pour le même FK :

FK Field1 Field2
3 ABC DEF

Solution :

Pour obtenir ce résultat, des fonctions d'agrégation peuvent être utilisées. Les fonctions d'agrégation ignorent les valeurs NULL, permettant la fusion de valeurs non NULL. Par exemple, la requête suivante (testée dans SQL Server Express 2008 R2) peut être utilisée :

SELECT
    FK,
    MAX(Field1) AS Field1,
    MAX(Field2) AS Field2
FROM
    table1
GROUP BY
    FK;

La fonction MAX permet de sélectionner une valeur parmi les lignes regroupées par FK. Toute fonction d'agrégation qui récupère une valeur unique dans les lignes groupées peut être utilisée.

Exemples de données et de résultats :

Considérez les exemples de données suivants :

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');

L'exécution de la requête sur cet exemple de données donne le résultat suivant :

FK  Field1  Field2
--  ------  ------
3   ABC     DEF
4   JKL     PQR

Ainsi, le les lignes sont effectivement fusionnées, combinant des valeurs non NULL pour le même FK dans les colonnes Field1 et Field2.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn