2012-09-13 117 views
0

一整天都在努力尝试各种组合,如果有人可以帮忙,就没有任何快乐吧?我使用WITH ROLLUP来总计一个Total列,它向输出每列总和的表格的脚增加一行。使用ORDER BY和ROLLUP

我现在需要订购最后一列[利润]降序,所以最高的数字在顶部。我已经实现了这个使用下面的查询,但它也排序ROLLUP行,是否有一个方法将汇总作为一个单独的实体,所以ORDER BY只在正常记录上完成?

Select 
    * 
From 
    (Select 
     c.ContactFullName As Adviser, 
     Sum(If(Month(b.CaseDate) = 1, b.LeadCost, 0)) As Jan, 
     Sum(If(Month(b.CaseDate) = 2, b.LeadCost, 0)) As Feb, 
     Sum(If(Month(b.CaseDate) = 3, b.LeadCost, 0)) As Mar, 
     Sum(If(Month(b.CaseDate) = 4, b.LeadCost, 0)) As Apr, 
     Sum(If(Month(b.CaseDate) = 5, b.LeadCost, 0)) As May, 
     Sum(If(Month(b.CaseDate) = 6, b.LeadCost, 0)) As Jun, 
     Sum(If(Month(b.CaseDate) = 7, b.LeadCost, 0)) As Jul, 
     Sum(If(Month(b.CaseDate) = 8, b.LeadCost, 0)) As Aug, 
     Sum(If(Month(b.CaseDate) = 9, b.LeadCost, 0)) As Sep, 
     Sum(If(Month(b.CaseDate) = 10, b.LeadCost, 0)) As Oct, 
     Sum(If(Month(b.CaseDate) = 11, b.LeadCost, 0)) As Nov, 
     Sum(If(Month(b.CaseDate) = 12, b.LeadCost, 0)) As Decb, 
     Sum(b.LeadCost) As LeadCosts, 
     Sum(b.CaseCommission) As GrossComm, 
     (Sum(b.CaseCommission) * 40/100) As GHL_Comm, 
     (Sum(b.CaseCommission) * 40/100 - Sum(b.LeadCost)) As Profit 
    From 
     tblcontacts a Inner Join 
     tblcases b On a.ContactID = b.ContactID Inner Join 
     mi_tblcontacts c On c.Mi_ContactID = b.ContactAssignedTo Inner Join 
     tblreferral d On d.RefferalID = a.ContactReferrelSource 
    Group By 
     c.ContactFullName With Rollup) q 
Order By 
    q.Profit Desc 

任何帮助表示赞赏。

回答

1

你可以尝试这样的事:

SELECT *, If(ContactFullName is null, 1, 0) as rolledup 
FROM (.... giant inner select goes here ...) 
ORDER BY rolledup asc, q.profit desc 
+0

谢谢您的回答,你好当我尝试这一点,告诉我“在字段列表中未知列ContactFullName”? 干杯 – gary

+1

嗨,我只是将ContactFullName更改为q.adviser,它工作得很好。谢谢你的帮助。 – gary

0

当您通过利润倒序那么你将得到汇总列第一行,这是不是meaningfull.So我猜你不能做这样的。据我所知,你不能简单地改变一个coulmn的顺序,并保持其余的列顺序固定。