- Utilisez
LEFT JOIN
pour vous assurer que vous obtenez la liste complète des entreprises même s'il n'y a pas de facture pour un mois.
- Vous devez créer n colonnes manuellement ou à l'aide d'un script.
- Vous pouvez simplement faire une jointure simple, aucune sous-requête n'est requise.
- Utilisez
GROUP BY
pour générer un seul enregistrement par entreprise.
- Utilisez
CASE WHEN
ou IF ELSE
pour créer n colonnes et sélectionner les données de la ligne pertinente uniquement. Il peut s'agir de la première ligne ou de n'importe quelle ligne, utilisez donc la fonction d'agrégation pour sélectionner des données même si elles se trouvent sur n'importe quelle ligne d'un groupe en définissant les autres valeurs de ligne comme NULL
en tant que fonction d'agrégation, exclure les valeurs nulles.
SELECT
u.display_name,
SUM(IF( bill_month='Jan2k19', package_price, NULL)) as first_bill,
SUM(IF( bill_month='Feb2k19', package_price, NULL)) as second_bill,
SUM(IF( bill_month='Mar2k19', package_price, NULL)) as third_bill
FROM bf_users u
LEFT JOIN bf_monthly_bill b on u.id=b.company_id
GROUP BY u.display_name;