2013-01-23 43 views
0

我有mysql查詢,輸出年份導致v銷售,並計算轉換率在2012年工作很好,因爲它只持有一年的數據。現在,2013年我需要改變它的工作方式,但已經陷入困境。如果鉛排在2012年12月,然後成爲一個銷售在2013年它從我的查詢輸出ommitted因爲它僅要求2013年mysql跨越多年的where子句?

Select 
    q.*, 
    ROUND(100 * q.Comms/q.Total, 2) As Conversion, 
    If(q.Adviser Is Null, 1, 0) As remove 
From 
    (Select 
     a.ContactFullName As Adviser, 
     Sum(Year(b.CaseDate) = 2013 And Month(b.CaseDate) = 1) As Jan, 
     Sum(Year(b.CaseDate) = 2013 And Month(b.CaseDate) = 2) As Feb, 
     Sum(Year(b.CaseDate) = 2013 And Month(b.CaseDate) = 3) As Mar, 
     ..... Dec 
     Sum(Case 
     When Year(b.CaseDate) = 2013 And Month(b.CaseDate) Between '1' 
     And '12' Then 1 Else 0 End) As Total, 
     Sum(Case When (Year(b.CaseDate) = 2012 Or Year(b.CaseDate) = 2013) And Year(b.StatusSubmittedDate) = ".(int)$_POST['year']." And Month(b.StatusSubmittedDate) Between ".(int)$_POST['start']." And ".(int)$_POST['end']." Then 1 Else 0 End) As Comms 
    From 
     tblcontacts a Inner Join 
     tblcases b On a.ContactID = b.ContactAssignedTo 
    Group By 
     a.ContactFullName With Rollup) q 

這適用於CaseDate;

Sum(Case When (Year(b.CaseDate) = 2012 Or Year(b.CaseDate) = 2013) And Year(b.StatusSubmittedDate) = 2013 And Month(b.CaseDate) Between '1' And '12' Then 1 Else 0 End) As Comms 

這donly顯示引線進入2013年提交&;

Sum(Case When (Year(b.CaseDate) = 2012 Or Year(b.CaseDate) = 2013) And Year(b.StatusSubmittedDate) = ".(int)$_POST['year']." And Month(b.CaseDate) Between ".(int)$_POST['start']." And ".(int)$_POST['end']." Then 1 Else 0 End) As Comms 

非常感謝

回答

1

這取決於你的業務邏輯。如果邏輯上說你只顯示同一年出現的潛在客戶,那麼你的代碼是完全正確的(原樣?)。如果你想包括2012年或2013(它看起來像你這樣做),你需要完全拼寫出來,服務器不明白「2012年或2013年」

Sum(Case When (Year(b.CaseDate) = 2012 Or Year(b.CaseDate) = 2013) And Year(.... 

注意周圍或語句的括號,這是爲了確保CaseYear=2012 or CaseYear=2013 and SubmitYear=2013作爲(CaseYear=2012 or CaseYear=2013) and SubmitYear=2013,而不是CaseYear=2012 or (CaseYear=2013 and SubmitYear=2013)

當然,如果業務邏輯不關心CaseYear處理,然後採取了求和的。

+0

@ EvilBob22-非常感謝您的回答,抱歉,延遲迴復。這很好,立即解決了這個問題,所以非常感謝你。不幸的是,它是我的錯,但是當我發佈時,我使用了2012年和2013年,因爲這是我的本地開發人員的工作方式,但是我使用的是從選擇字段中取得的值,並且不知何故這再次打破了它,這讓我感到莫名其妙更多!我已經更改了原始代碼以反映它的實況。無法看到如何使用代碼而不是2012/2013會破壞查詢? – gary

+0

所有排序現在有一些變化,工作代碼在上面的原始帖子。謝謝@ EvilBob22 – gary

+0

真棒,很高興它解決了。 – EvilBob22