2013-10-08 38 views
6

Ben şu MySQL sorgusu:MySQL Toplaması Bulmaca

select 
     members_categories.category_desc as 'membership_type', 
    SUM(CASE payment_method WHEN 'Bank Transfer' THEN amount_paid ELSE 0 END) AS 'Bank Transfer', 
    SUM(CASE payment_method WHEN 'Cash' THEN amount_paid ELSE 0 END) AS 'Cash', 
    SUM(CASE payment_method WHEN 'Cheque' THEN amount_paid ELSE 0 END) AS 'Cheque', 
    SUM(CASE payment_method WHEN 'Credit Card' THEN amount_paid ELSE 0 END) AS 'Credit Card', 
    SUM(CASE payment_method WHEN 'Direct Debit' THEN amount_paid ELSE 0 END) AS 'Direct Debit', 
    SUM(CASE payment_method WHEN 'PayPal' THEN amount_paid ELSE 0 END) AS 'PayPal', 
    SUM(CASE payment_method WHEN 'Salary Deduction' THEN amount_paid ELSE 0 END) AS 'Salary Deduction', 
    SUM(CASE payment_method WHEN 'Standing Order' THEN amount_paid ELSE 0 END) AS 'Standing Order', 
    SUM(amount_paid) AS 'Total' 
    FROM members_main, members_categories, members_payments 
    WHERE members_categories.category_code=members_main.membership_type and members_main.contact_id=members_payments.contact_id and members_payments.payment_date between '2012-01-01' and '2013-12-31' 
    GROUP BY membership_type With ROLLUP 

verir:

altta ROLLUP toplam yukarıda da görebileceğiniz gibi

enter image description here

membership_type bir Descrption gösterir Son satırın alanı döndü. Bunu, Toplam kelimesiyle değiştirmenin bir yolu var mı? Bunun için

+1

'ROLLUP' – Neal

+0

Nope bilmiyordu Serin. Mysql sözdiziminde böyle bir seçenek yoktur. Aktarılan alanın İLK örneğinin orijinal değer olduğunu ve sonraki değerin toparlanması olduğunu anlamak için adı çoğaltmanız gerekir. –

+1

belgelerine göre, bu hücre değeri "NULL" olmalıdır. Burada bir şey balık var. http://dev.mysql.com/doc/refman/5.0/en/group-by-modifiers.html –

cevap

1

Kullanım IFNULL:

select 
    IFNULL(members_categories.category_desc, 'Total') as 'membership_type', 

... 
GROUP BY membership_type With ROLLUP 

Bu neye ihtiyacınız yok. Eğer uyumlu tamamen ANSI ediliyordu Eğer GROUP BY deyiminde birden fazla öğe kullanıyorsanız, sen

GROUP BY members_categories.category_desc With ROLLUP 

kullanmak istiyorum, sen IFNULL ile hepsini işlemek gerekir. Örneğin, SqlFiddle’ınızdan. http://sqlfiddle.com/#!2/8818d/16/0

SELECT IFNULL(product,'GROUP TOTAL') AS product,  <--- group by term 
     IFNULL(year, 'YEAR TOTAL') as year,   <--- group by term 
     SUM(amount) 
    FROM test_rollup 
GROUP BY year, product WITH ROLLUP 
+0

Teşekkürler. Sadece denedim ve aynı sonucu aldım. Garip bir şey var bence –

+0

bu yerel makinemde test ettiğim çalışıyor –

+0

Bir nedenle kesinlikle burada çalışmıyor - Neden hiçbir fikrim yok. Verilerle ilgili bir şey olabilir mi? –