- Използвайте
LEFT JOIN
за да сте сигурни, получавате пълен списък с компании, въпреки че няма сметка за нито един месец.
- Трябва да създадете n колони ръчно или с помощта на скрипт.
- Можете просто да направите просто присъединяване, не се изисква подзаявка.
- Използвайте
GROUP BY
за генериране на единичен запис за компания.
- Използвайте
CASE WHEN
или IF ELSE
за създаване на n колони и избиране на данни само от съответния ред. Може да бъде първи или който и да е ред, така че използвайте обобщена функция, за да изберете данни, дори да са на който и да е ред за група, като направите стойностите на други редове като NULL
като агрегатна функция изключва нулеви стойности.
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;