2013-01-23 41 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