2016-11-16 3 views
-1

データ条件を無視していますか?SQL Serverの - 任意の提案 - 句の条件はWHERE句が無視されている場所にはいくつかの理由で

SELECT D.[Date], 
     D.Year, 
     D.MonthName, 
     D.WeekOfYear, 
     E.bu_name, 
     E.emp_mgr, 
     E.emp_sup, 
     E.emp_name, 
     E.emp_jde, 
     C.calls, 
     s.sales 
FROM DateTable AS D 
     CROSS JOIN EmployeeTable AS E 
     LEFT JOIN (SELECT CAST([start_date] AS DATE) AS call_date, 
          [agent_no] AS agent_id, 
          SUM(CASE WHEN [skill_name] LIKE '5700 Sales l%' 
              AND [Agent_Time] != '0' THEN 1 
            ELSE 0 
           END) AS calls 
        FROM  CallTable 
        GROUP BY CAST([start_date] AS DATE), 
          [agent_no] 
       ) AS C ON D.[Date] = C.call_date 
          AND E.emp_vcc = C.agent_id 
     LEFT JOIN (SELECT [AC#DTE_dt] AS sale_date, 
          [EMPJDENUM] AS emp_jde, 
          SUM(CASE WHEN [CHANNEL] = 'I' 
              AND ([ICGCD2] = 'L' 
               OR [ICGCD2] = 'H') 
              AND [ITMQTY] > 3 
              AND [EMPBUNCOD] IN ('5044','5077') THEN 1 
            ELSE 0 
           END) AS sales 
        FROM  SalesTable 
        GROUP BY [AC#DTE_dt], 
          [EMPJDENUM] 
       ) AS S ON D.Date = s.sale_date 
          AND E.emp_jde = S.emp_jde 
WHERE c.calls > 0 
     OR S.sales > 0 
     AND d.Year = '2016' 
+0

。これをやろうとしましたか? 'where(c.calls> 0 or S.sales> 0)とd.Year = '2016'' –

+0

まずはあなたの乱雑さの定義に興味がありますか?私はこれにかなり新しいです - もし改善があれば、私は確かにそれらについて学ぶことが大好きです... – user3067478

+1

私はそれが複雑に見えることを意味しました。それに加えて、データ構造を示したり、サンプルの入力と期待される出力を提供することなく、トラブルシューティングするのは難しいことです。 –

答えて

1

これは実際の回答ではなく、より簡単にこのクエリをフォーマットできる方法の例です。私はまた、ほとんど確実に何が問題になっているかに対応するために、どこで述語を修正しました。 1つの乱雑クエリの

SELECT D.[Date] 
    , D.Year 
    , D.MonthName 
    , D.WeekOfYear 
    , E.bu_name 
    , E.emp_mgr 
    , E.emp_sup 
    , E.emp_name 
    , E.emp_jde 
    , C.calls 
    , s.sales 
FROM [Date Table] AS D 
CROSS JOIN [Employee TABLE] AS E 
LEFT JOIN 
(
    SELECT Cast([start_date] AS DATE) AS call_date 
     , [agent_no] AS agent_id 
     , Sum(CASE WHEN [skill_name] LIKE '5700 Sales l%' AND [Agent_Time] != '0' THEN 1 ELSE 0 END) AS calls 
    FROM [Call TABLE] 
    GROUP BY Cast([start_date] AS DATE), [agent_no] 
) AS C ON D.[Date] = C.call_date 
     AND E.emp_vcc = C.agent_id 
LEFT JOIN 
(
    SELECT [AC#DTE_dt] AS sale_date 
     , [EMPJDENUM] AS emp_jde 
     , Sum(CASE WHEN [CHANNEL] = 'I' AND [ICGCD2] IN ('L', 'H') AND [ITMQTY] > 3 AND [EMPBUNCOD] IN ('5044', '5077') THEN 1 ELSE 0 END) AS sales 
    FROM [Sales TABLE] 
    GROUP BY [AC#DTE_dt], [EMPJDENUM] 
) AS S ON D.Date = s.sale_date 
    AND E.emp_jde = S.emp_jde 
WHERE 
(
    c.calls > 0 
    OR 
    S.sales > 0 
) 
AND d.Year = '2016'; 
+0

カッコが追加されました - これを試しました。クエリを完了するまでの時間がかなり長くなったので、私はそれらを残すことにしました – user3067478

+2

それは時間がかかるかもしれませんが、かっこなしではクエリのロジックは全く異なります。 –

関連する問題