Maison >base de données >tutoriel mysql >Comment puis-je combiner deux tables avec des structures similaires mais des catégories différentes en une seule table de sortie ?
Combiner deux tables pour une seule sortie
Les opérations de base de données nécessitent souvent de fusionner des données provenant de plusieurs sources en une sortie cohérente. Un défi courant consiste à combiner des tableaux avec des structures similaires mais des catégories différentes. Considérez le problème suivant :
Vous disposez de deux tables, "KnownHours" et "UnknownHours", avec des colonnes comprenant ChargeNum (un identifiant unique), CategoryID (une attribution de catégorie), Month (une date) et Hours ( la valeur réelle). La tâche consiste à combiner ces tables, en ignorant la colonne Mois, en une seule table de données, regroupant les heures par ChargeNum et CategoryID.
Le résultat attendu est :
ChargeNum CategoryID Hours 111111 1 90 111111 2 50 111111 Unknown 110.5 222222 1 40 222222 Unknown 25.5
Pour y parvenir , nous pouvons utiliser l'opérateur UNION, qui combine les résultats de deux requêtes. Pour ce problème, nous allons construire deux requêtes :
Requête 1 :
SELECT ChargeNum, CategoryID, SUM(Hours) FROM KnownHours GROUP BY ChargeNum, CategoryID
Cette requête récupère le ChargeNum, le CategoryID et la somme des heures pour chaque combinaison de la table "KnownHours".
Requête 2 :
SELECT ChargeNum, 'Unknown' AS CategoryID, SUM(Hours) FROM UnknownHours GROUP BY ChargeNum
Cette requête récupère le ChargeNum et la somme des heures pour chaque entrée de la table « UnknownHours », en attribuant « Inconnu » comme CategoryID.
Combinant les deux les requêtes utilisant UNION ALL produisent le résultat souhaité :
SELECT ChargeNum, CategoryID, SUM(Hours) FROM KnownHours GROUP BY ChargeNum, CategoryID UNION ALL SELECT ChargeNum, 'Unknown' AS CategoryID, SUM(Hours) FROM UnknownHours GROUP BY ChargeNum
L'opérateur UNION ALL fusionne les résultats sans supprimer doublons, offrant une vue complète des données combinées.
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!