0

私は mysql クエリを持っています。このクエリは年数のリードと売上を出力し、コンバージョン率を計算します。これは 2012 年には 1 年分のデータしか保持されていなかったため、うまく機能しました。2013年になり、動作を変更する必要がありますが、行き詰まりました。リードが 2012 年 12 月に発生し、その後 2013 年に販売になった場合、2013 年の CaseDate のみを要求するため、クエリ出力から省略されます。

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

これは機能します。

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

これは、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

どうもありがとう

4

1 に答える 1

1

それはあなたのビジネスロジックに依存します。同じ年に来たリードのみを表示するというロジックの場合、コードは現状のままで完全に正しいです(現状のままですか?)。2012または2013(あなたがそうしているように見えます)を含めたい場合は、それを完全に説明する必要があります。サーバーは「2012または2013」を理解しません。

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

Orステートメントを囲む括弧に注意してください。これは、OrステートメントがではなくCaseYear=2012 or CaseYear=2013 and SubmitYear=2013として扱われるようにするためです。(CaseYear=2012 or CaseYear=2013) and SubmitYear=2013CaseYear=2012 or (CaseYear=2013 and SubmitYear=2013)

もちろん、ビジネスロジックがCaseYearを気にしない場合は、Sumからそれを取り出してください。

于 2013-01-23T16:03:23.843 に答える