MySQL沒有一個支點功能,但你可以使用一個CASE
表達和聚合函數打開行轉換成列:
select m.membership_type,
sum(case when p.payment_method = 'Cash' then amount_paid else 0 end) Cash,
sum(case when p.payment_method = 'Credit Card' then amount_paid else 0 end) CreditCard,
sum(case when p.payment_method = 'Paypal' then amount_paid else 0 end) Paypal
from members_main m
inner join members_payments p
on m.contact_id=p.contact_id
group by m.membership_type;
如果你將有一個未知數payment_method
的,那麼你會想看看使用一個準備好的語句來生成動態SQL:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'sum(CASE WHEN p.payment_method = ',
payment_method,
' THEN amount_paid else 0 END) AS `',
payment_method, '`'
)
) INTO @sql
FROM members_payments ;
SET @sql
= CONCAT('SELECT m.membership_type, ', @sql, '
from members_main m
inner join members_payments p
on m.contact_id=p.contact_id
group by m.membership_type');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
'DISTINCT'與'GROUP BY'? – Kermit 2013-05-08 14:00:33