2013-05-08 54 views
2

我有以下SQL代碼:的MySQL和結果插入到表網格格式

select distinct members_main.membership_type, 
payment_method,sum(amount_paid) 
from members_main, members_payments 
where members_main.contact_id=members_payments.contact_id 
group by members_main.membership_type,payment_method 

返回以下內容:

enter image description here

我希望能夠返回的結果以下表格格式:

enter image description here

有誰知道我是否可以在MySQL中做到這一點?

感謝,

約翰

+3

'DISTINCT'與'GROUP BY'? – Kermit 2013-05-08 14:00:33

回答

0

根據數據的複雜性,可以採用bluefeet的方式,或者如果payment_method的數量是動態的,那麼它聽起來像需要一個數據透視表。嘗試看看this

+0

謝謝,從那個鏈接得到我需要的代碼 – user2281899 2013-05-08 15:20:10

0

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;