Maison >base de données >tutoriel mysql >Comment pouvons-nous combiner les tables KnownHours et UnknownHours pour un rapport sur les heures unifié ?
Combiner des tables pour une sortie unifiée
Introduction :
Lorsque vous traitez plusieurs tables, il devient nécessaire de les fusionner afin de fournir un résultat complet et significatif. La combinaison de tables implique des techniques telles que la jointure, l'union et l'agrégation.
Énoncé du problème :
La tâche à accomplir consiste à combiner deux tables, KnownHours et UnknownHours, en une seule sortie qui regroupe les heures par ChargeNum et CategoryID, en ignorant le mois.
Tableau Détails :
Table | Column | Description |
---|---|---|
KnownHours | ChargeNum | Unique charge number |
KnownHours | CategoryID | Category associated with the charge |
KnownHours | Month | Month when the charge was incurred |
KnownHours | Hours | Known hours for the charge |
UnknownHours | ChargeNum | Unique charge number |
UnknownHours | Month | Month when the charge was incurred |
UnknownHours | Hours | Unknown hours for the charge |
Sortie souhaitée :
La sortie attendue est une table unique avec la structure suivante :
Table | Column | Description |
---|---|---|
Consolidated | ChargeNum | Unique charge number |
Consolidated | CategoryID | Category associated with the charge or 'Unknown' |
Consolidated | Hours | Total hours for the charge |
Solution :
Pour obtenir le résultat souhaité, nous utiliserons l'opération UNION dans SQL. UNION combine les résultats de plusieurs requêtes dans une seule table. Dans ce cas, nous exécuterons deux requêtes, une pour la table KnownHours et une pour la table UnknownHours. Les requêtes regrouperont les heures pour chaque ChargeNum et CategoryID (et 'Unknown' pour UnknownHours).
La première requête pour la table KnownHours :
SELECT ChargeNum, CategoryID, SUM(Hours) FROM KnownHours GROUP BY ChargeNum, CategoryID
La deuxième requête pour la table UnknownHours :
SELECT ChargeNum, 'Unknown' AS CategoryID, SUM(Hours) FROM UnknownHours GROUP BY ChargeNum
Enfin, nous combinerons les résultats de ces deux requêtes en utilisant UNION ALL :
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
Cette opération UNION ALL concaténera les résultats des deux requêtes en une seule table, fournissant le résultat souhaité.
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!